if (getOperator=="/"){
try {
sum = value1/value2;
} catch (Exception e) {
summaryTxt.setText("Invalid operation");
}
}
这里有什么问题?如何处理除以0
if (getOperator=="/"){
try {
sum = value1/value2;
} catch (Exception e) {
summaryTxt.setText("Invalid operation");
}
}
这里有什么问题?如何处理除以0
这是错误的,这是一个不好的做法。
想象一下,value1可以是整数,它是空的。然后你会捕获一个NullPointerException,但是你的代码会告诉你这个操作是无效的,但事实并非如此。
例外情况不适用于检查条件。最好明确地检查它们:
if (getOperator=="/"){
if (value2 == 0) {
summaryTxt.setText("Value2 can't be 0!");
} else {
sum = value1/value2;
}
}
它仍然不显示“值2不能为0!” – user65544 2011-05-06 07:48:41
+1:不应该将异常用于流量控制,特别是当简单的“if-else”检查就足够了。 @ user655443:如果它不显示那条消息,那么'value2'不是零。因此不会出现除零误差。 – 2011-05-06 07:51:13
我尝试,如果(getOperator == “/”){ \t \t { \t如果(值2 == 0){ \t \t Log.d( “测试”, “EEEE”); \t summaryTxt.setText(“”+“Value2不能为0!”); \t} else { \t sum = value1/value2; \t} \t} \t} – user65544 2011-05-06 07:54:12
你可以简单地检查是否 Value2.equals(0); 并抛出你自己的例外如果是的话
如果值为例如0,则除零除外将抛出ArithmeticException。整数,所以这就是你应该捕获的。
通过使用零个表演双打部门将代替,结果,可为Double.Infinity
如果您想通过捕捉异常,然后做到这一点:
if (getOperator == "/") {
try {
sum = value1/value2;
} catch (ArithmeticException e) {
summaryTxt.setText("Invalid operation: " + e.getMessage());
}
}
追赶Exception
绝对是一个坏主意一般来说,如果不是在这个特定的情况下。问题在于,你很可能会遇到你(程序员)没有预料到的其他类型的异常;例如如果value1
或value2
的类型是基本包装类,且值为null
,则在此情况下为NullPointerException。
您是否应该使用异常或通过显式测试零来实现这一点也是有争议的。国际海事组织,无论哪种方式可以接受在这里。除以零分区很可能是此代码罕见的情况,规则是您应该只在特殊情况下使用例外。 (你不必,但你可以...)
但是,我想我会使用明确的测试,理由是它使代码更容易阅读。
if (getOperator == "/") {
if (value2 != 0) {
sum = value1/value2;
} else {
summaryTxt.setText("Invalid operation: divide by zero");
}
}
(旁白:getOperator == "/"
是不可靠的,除非你的代码保证是getOperator总是包含intern'ed字符串...)
if (getOperator=="/" && value2 == 0){
summaryTxt.setText("Value2 can't be 0!");
}else if(getOperator=="/" && != 0){
sum = value1/value2;
}
这么漂亮的代码)
我用的是以下处理除以零和NaN:
public static double safeDivide(double dividend, double divisor) {
if(Double.compare(divisor, Double.NaN) == 0) return Double.NaN;
if(Double.compare(dividend, Double.NaN) == 0) return Double.NaN;
if(Double.compare(divisor, 0.0) == 0) {
if(Double.compare(dividend, 0.0) == -1) {
return Double.NEGATIVE_INFINITY;
}
return Double.POSITIVE_INFINITY;
}
if(Double.compare(divisor, -0.0) == 0) {
if(Double.compare(dividend, -0.0) == 1) {
return Double.NEGATIVE_INFINITY;
}
return Double.POSITIVE_INFINITY;
}
return dividend/divisor;
}
参考:
math.stackexchange >>I have learned that 1/0 is infinity, why isn't it minus infinity?
这是不直接关系到你的问题,但你永远不应该用==比较字符串。改用Equals。 ==用于比较内存引用。此外,要么使用getter名称getOperator,要么使用missing(),要么使用更好的名称(如运算符)。 – 2011-05-06 08:24:42