Java计算器,终止

时间:2013-07-01 21:22:29

标签: java

只要除以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);}}

5 个答案:

答案 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)

ArithmeticExceptionRuntimeException。 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);