有没有人能帮我找到可执行文件的位置?我似乎找不到问题所在。
public void fieldChanged(Field f, int context){
//if the submit button is clicked
try{
stopTime = System.currentTimeMillis();
timeTaken = stopTime - startTime;
timeInSecs = ((timeTaken/1000));
speed = 45/timeInSecs;
Dialog.alert("Speed of Delivery: " + speed + "mph");
}
catch(ArithmeticException e){
Dialog.alert("error " + speed);
e.printStackTrace();
}
} startTime变量是一个全局变量。
编辑: timeinSecs如何= 0?我似乎不能让我的调试器在BlackBerry JDE上工作,所以必须有人来帮助我:( timeTaken应该是从按下开始按钮到按下停止按钮的时间,单位为毫秒……
所有其他变量也是全局变量
发布于 2010-04-27 09:17:17
异常具有类型,这允许您查找类型并快速对问题进行分类。从文档中:
ArithmeticException:当发生异常算术条件时抛出。例如,一个整数“除以零”抛出这个类的一个实例。
此外,大多数异常都是用消息构造的,以帮助您进一步弄清楚发生了什么。
try {
int i = 0 / 0;
} catch (ArithmeticException e) {
e.printStackTrace();
}这将打印:
java.lang.ArithmeticException: / by zero
at [filename:line number]但是这是怎么发生的?
与许多其他编程语言一样,Java区分整数除法和浮点除法。
JLS 15.17.2 Division Operator /
二元
/运算符执行除法,产生其操作数的商。左边的操作数是被除数,右边的操作数是除数。整数除法舍入为0。..。如果整数除法中除数的值为0,则抛出ArithmeticException。
如果你不熟悉整数除法,下面的内容可能会让你大吃一惊:
System.out.println(1/2); // prints "0"这里发生的事情是,由于被除数和除数都是int,所以操作是一个整数除法,其结果四舍五入为int。请记住,int只能包含整数(有限范围,大约40亿个数字)。
您可以通过将至少一个操作数设为浮点数来指定需要进行浮点除法。
System.out.println(1/2.0); // prints "0.5"
System.out.println(1D/2); // prints "0.5"D是数字文字的特殊后缀,用于指定它是double-precision值。还有针对long (64位整数)的L。
需要在double变量中存储double值。
double v = 1D / 2; // v == 0.5
int i = 1D / 2; // DOESN'T COMPILE!!! Explicit cast needed!请注意,执行哪个划分与它最终将转到什么类型没有任何关系。它只取决于被除数和除数的类型。
double v = 1 / 2; // v == 0.0 (!!!)您还应该注意到,double也是一个有限精度的数字。
System.out.println(.2D + .7D - .9D); // prints "-1.1102230246251565E-16"但是我的代码呢?
所以现在,让我们关注一下你的代码中发生了什么:
timeTaken = stopTime - startTime;
timeInSecs = ((timeTaken/1000));
speed = 45/timeInSecs;更可能发生的情况是,timeTaken被声明为long。因此,timeTaken/1000会导致整数除法。如果为timeTaken < 1000,则除法的结果为0。
此时,timeInSecs是double还是float都无关紧要,因为已经执行了整数除法。这意味着timeInSecs将是0或0.0,具体取决于其类型。
但是,从您得到的错误中,可以确定timeInSecs很可能是整数类型。否则,45/timeInSecs将导致浮点除法,从而产生Infinity (一个特殊的double值),而不是抛出ArithmeticException。
那么我们如何解决这个问题呢?
我们可以通过声明变量来修复这个问题,如下所示:
long timeTaken;
double timeInSecs;
double speed;然后执行如下计算(请注意,1000现在是一个double值)。
timeTaken = stopTime - startTime;
timeInSecs = timeTaken/1000D;
speed = 45D/timeInSecs; // D is not necessary here, but it's good for clarity另请参阅
发布于 2010-04-27 05:31:25
可能就在这里:speed = 45/timeInSecs;
确保timeInSecs不是零。
发布于 2010-04-27 05:33:02
创建timeInSecs和speed浮点数,然后执行以下操作:
timeInSecs = (timeTaken/1000.0);https://stackoverflow.com/questions/2717032
复制相似问题