只要除以0或使用非整数,我的计算器就会终止。我不能让我的while循环工作。
任何人都可以提供帮助,并解释我如何解决这个问题吗?
编辑:
它仍然会终止。
package b;
import java.util.*;
public class Calculator3{
static boolean _state = true;
public static void main (String[] args){
System.out.println("Usage: operand1 operator operand2");
System.out.println("Operands are integers");
System.out.println("Operators: + - * /");
Scanner in = new Scanner(System.in);
do{
int result = 0;
int operand1 = 0;
int operand2 = 0;
String operator = " ";
char op = ' ';
try{
operand1 = in.nextInt();
operator = in.next();
op = operator.charAt(0);
operand2 = in.nextInt();}
catch (InputMismatchException e){
System.out.println("One or both of the operands are non-integers. Please check your operands");
break;}
try{
switch (op){
case '+': result = operand1 + operand2;
break;
case '-': result = operand1 - operand2;
break;
case '*': result = operand1 * operand2;
break;
case '/': result = operand1 / operand2;
break;
default: System.out.println("Unknown Operator");
break;}
}
catch(RuntimeException e){
System.out.println("Operand2 cannot be 0");
System.exit(0);}
finally{
System.out.println("Answer: " + operand1 + ' ' + op + ' ' + operand2 + " = " + result);}
}
while (_state = true);}}
答案 0 :(得分:4)
} while (_state = true);
应该是
} while (_state == true);
或更好
} while (_state);
您需要避免以下条件,以避免早期退出循环:
ArithmeticException
的表达式,例如3/0
。答案 1 :(得分:1)
如果您尝试除以零,则会抛出异常。
您的catch块会调用System.exit()
。
这就是为什么当你除以零时你的代码“终止”。
在将其用于算术之前,您应验证输入(确保它是实数)。
我会做这样的事情:
do {
try {
char op = operator.charAt(0);
int operand1 = in.nextInt();
int operand2 = in.nextInt();
if (operand2 == 0 && op == '/') {
System.out.println("Cannot divide by zero");
continue;
}
.
.
.
switch (op) {
.
.
.
}
}
catch (NumberFormatException nfe) {
System.out.println("Invalid input");
continue;
}
} while (_state);
这只是众多可能方法中的一种。
查看你的try / catch逻辑,并考虑在抛出不同的异常时会发生什么。
答案 2 :(得分:1)
ArithmeticException是RuntimeException
。 catch块触发,并执行System.exit(0)
。想想你想如何处理错误。退出可能不是它。
答案 3 :(得分:0)
试试这个
case '/':
if (operand2 == 0) {
System.out.println("Operand2 cannot be 0");
continue;
} else {
result = operand1 / operand2;
break;
}
答案 4 :(得分:0)
您的计划正在退出2个条件。
首先是
catch (InputMismatchException e){
System.out.println("One or both of the operands are non-integers. Please check your operands");
break;}
如果您仍希望在非整数的情况下继续,例如double,float等,请删除此中断。
第二是
` catch(RuntimeException e){
System.out.println("Operand2 cannot be 0");
System.exit(0);}`
System.exit(0)导致此while循环中断,如果要继续,则删除System.exit(0);