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