求一个java大神帮我改改代码 下面是详情 有意思的留下QQ
为什么下面的会报出内存溢出的异常难道是我的while循环写错了classMouseListenerimplementsActionListener{publicvoida...
为什么下面的会报出内存溢出的异常 难道是我的 while 循环写错了class MouseListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
List <String> Strings = new ArrayList<String>();
String s = e.getActionCommand() ;
while (flag == true){
Strings.add(s) ;
if(s.equals("Backspace")||s.equals("CEe")||s.equals("C")||s.equals("MC")||
s.equals("MR")||s.equals("/")||s.equals("sqlt")||s.equals("+")||s.equals("-")
||s.equals("*")||s.equals("!")||s.equals("%")||s.equals("MS")||
s.equals("MS")||s.equals("sin")||s.equals("cos")||s.equals("tan")) {
for (int i = 0 ; i < Strings.size()-1 ;i++){
String ss = null ;
ss = ss + Strings.get(i);
jtf.setText(ss) ;
}
flag = false ; 展开
public void actionPerformed(ActionEvent e) {
List <String> Strings = new ArrayList<String>();
String s = e.getActionCommand() ;
while (flag == true){
Strings.add(s) ;
if(s.equals("Backspace")||s.equals("CEe")||s.equals("C")||s.equals("MC")||
s.equals("MR")||s.equals("/")||s.equals("sqlt")||s.equals("+")||s.equals("-")
||s.equals("*")||s.equals("!")||s.equals("%")||s.equals("MS")||
s.equals("MS")||s.equals("sin")||s.equals("cos")||s.equals("tan")) {
for (int i = 0 ; i < Strings.size()-1 ;i++){
String ss = null ;
ss = ss + Strings.get(i);
jtf.setText(ss) ;
}
flag = false ; 展开
3个回答
展开全部
我了个去,代码问题太多了:
1)if里面的内容太多了,可读性太差了,你要封装成为一个函数比较好。
2) String ss = null ;
ss = ss + Strings.get(i); 这句话是什么意思没有任何作用。
3)i < Strings.size()-1这里的逻辑你看看是你真是的想法么,一个String数组,最后一位应该是LENGTH-1,那么如果i=0;i<=Strings.size()-1比较合理吧。
4)你的代码逻辑错误了,这里你的意思应该是这样的吧:
String ss = null ;
for (int i = 0 ; i <=Strings.size()-1 ;i++){
ss = ss + Strings.get(i);
jtf.setText(ss) ;
}
5)命名不规范, jtf.setText(ss) ; JTF是什么,控件名字?
6)最后,如果IF命中不了,WHILE会一直执行的(因为FLAG=FALSE写到IF里面去了,IF不命中这里就不会执行到),然后会一直执行Strings.add(s) ;这句话,导致STRINGS这个LSIT被撑爆,内存溢出了。!!!!加油吧少年。!!!
1)if里面的内容太多了,可读性太差了,你要封装成为一个函数比较好。
2) String ss = null ;
ss = ss + Strings.get(i); 这句话是什么意思没有任何作用。
3)i < Strings.size()-1这里的逻辑你看看是你真是的想法么,一个String数组,最后一位应该是LENGTH-1,那么如果i=0;i<=Strings.size()-1比较合理吧。
4)你的代码逻辑错误了,这里你的意思应该是这样的吧:
String ss = null ;
for (int i = 0 ; i <=Strings.size()-1 ;i++){
ss = ss + Strings.get(i);
jtf.setText(ss) ;
}
5)命名不规范, jtf.setText(ss) ; JTF是什么,控件名字?
6)最后,如果IF命中不了,WHILE会一直执行的(因为FLAG=FALSE写到IF里面去了,IF不命中这里就不会执行到),然后会一直执行Strings.add(s) ;这句话,导致STRINGS这个LSIT被撑爆,内存溢出了。!!!!加油吧少年。!!!
展开全部
少分号吧。。flag=false 后面加两个分号
你在编辑器里面 把光标放到while (flag == true){ 这个分号后面 ,看看另一个分号在哪里。
你在编辑器里面 把光标放到while (flag == true){ 这个分号后面 ,看看另一个分号在哪里。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
死循环了,骚年,上面那兄弟回答的很全面了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询