当前位置: 代码迷 >> Java相关 >> [求助]怎么一天到晚就异常。。。疯了。。
  详细解决方案

[求助]怎么一天到晚就异常。。。疯了。。

热度:176   发布时间:2007-04-29 23:27:04.0
我看了下程序,我帮不了你处理,我只提几个意见
1.觉得actionPerformed()方法里比较乱,因为你在if-else嵌套中又写switch,最好不要这样写
用一个方法来写运算比较好点,如下
public void calculator(double x)
{
if(lastCommand.equals("+")) result+=x;
else if(lastCommand.equals("-")) result-=x;
else if(lastCommand.equals("*")) result*=x;
else if(lastCommand.equals("/")) result/=x;
else if(lastCommand.equals("=")) result=x;
else if(lastCommand.equals("+/-")) result=-x;
display.setText(""+result);
}
2.你用(char flag = 'n'; // 标志按了哪个运算符,初始为n,表示什么运算符没按)
不如用boolean flag=false;做标志位还好些!~
3.还有最好用swing写,不要用awt写!~
请不要怪我乱提意见,呵呵!~
----------------解决方案--------------------------------------------------------
个人建议如果是需要解决问题的最好是直接把代码发上来,如果是做好的东西让大家分享再打包,不然人的心理因素都不习惯弄半天建了新项目再慢慢找错误,这是所有人的心理因素,你把代码直接发上来,读者直接复制到工具上一粘贴就OK
----------------解决方案--------------------------------------------------------
以下是引用海蓝啸在2007-4-29 18:21:04的发言:

java.lang.NumberFormatException: For input string: "."
at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:48)
at java.lang.Integer.parseInt(Integer.java:446)
at java.lang.Integer.parseInt(Integer.java:496)
at My_caculator.actionPerformed(My_caculator.java:100)
at java.awt.Button.processActionEvent(Button.java:388)
at java.awt.Button.processEvent(Button.java:356)
at java.awt.Component.dispatchEventImpl(Component.java:3931)
at java.awt.Component.dispatchEvent(Component.java:3779)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
java.lang.NumberFormatException: For input string: "*"
at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:48)
at java.lang.Integer.parseInt(Integer.java:446)
at java.lang.Integer.parseInt(Integer.java:496)
at My_caculator.actionPerformed(My_caculator.java:100)
at java.awt.Button.processActionEvent(Button.java:388)
at java.awt.Button.processEvent(Button.java:356)
at java.awt.Component.dispatchEventImpl(Component.java:3931)
at java.awt.Component.dispatchEvent(Component.java:3779)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

从异常信息来看是你的转换问题,
at My_caculator.actionPerformed(My_caculator.java:100)
看看吧,第100行


----------------解决方案--------------------------------------------------------
回11楼:我那个flag变量不只是用来判断有没有按运算按纽,还要记录是按了哪个运算按纽,所以换成逻辑型的不行。。
还有就是如果我那个都一个方法来处理,然后在ActionPerformed里面调用,其实这是一个好方法,但是因为我
的源代码比较少,而且也只是调用一次,所以就图省事写在一起了。。还有就是我还不知道swing是什么东西,老
师还没有上到那个地方

回12楼:我有打包上传上来了,在1楼。。下载直接就可以打开

回千里:我看了100行,看不出什么错误。。其实第100行正是可以执行的地方,是输入数字的地方,而恰恰数字可以输入
,运算符,等号,小数点,控制按纽只要点全部都是异常。。不知道怎么回事。。看了半天都没地现有什么不对
的地方,所以如果你要是有空的话,还请帮忙看下。。。谢了

[此贴子已经被作者于2007-4-30 11:26:38编辑过]


----------------解决方案--------------------------------------------------------
if(Integer.parseInt(e.getActionCommand())>=1&& Integer.parseInt(e.getActionCommand())<=9){ //按的

这是你第100行的程序,还说没有错误?

e.getActionCommand你知道返回的是什么吗?就这样给它转型给整型?

要相信编译器,它提示你这里错了,那就一定是这里错了

java.lang.NumberFormatException: For input string: "."
并且它还提示了你,for input String "." 就是你尝试把"."变成int,这是异常的原因
----------------解决方案--------------------------------------------------------
恍然大悟中。。。。了解了。。THANK
----------------解决方案--------------------------------------------------------
把对数字的判断放到最后,不过计算好像还是有点问题!!
----------------解决方案--------------------------------------------------------
对加减乘除的判断改一下!

switch(e.getActionCommand().charAt(0)){

case '+':flag='p';break;
case '-':flag='m';break;
case '*':flag='t';break;
case '/':flag='d';
}
----------------解决方案--------------------------------------------------------
已改过。。。作了些改动。。。但是还有一个问题没有解决。。。就是把除数为0的情况下好像不是按我写的程序流程执行的。。。哪位帮看看。。下面这个是改过的程序


----------------解决方案--------------------------------------------------------
相除的时候,if else后需要加上一个大括号.基本上很完美了
----------------解决方案--------------------------------------------------------
  相关解决方案