0

我正在尝试制作一个 try/catch 程序计算器,它可以消除以下错误,但它不起作用。请告诉我我做错了什么。我应该测试非法操作数运算和除以零。

do // do while is for many operations
{
    try
    {
        System.out.println("Enter num1 and num2 : ");
        int num1 = new Scanner();
        int num2 = new Scanner();
        System.out.println("Enter sign : ");
        char sign = new Scanner();
    }
    catch(IllegalArgumentException ex) // This will check for illegal inputs
    {
        System.out.println(ex.Message()); //Will print error message
    }

    if(sign == '+')
    { // part of code where you will write the plus operation
        System.out.println(num1+num2);
    }
    if(sign == '-')
    {
        System.out.println(num1-num2);
    }
    if(sign == '*')
    {
        System.out.println(num1*num2);
    }
    if(sign == '/')
    {
        try
        {
            System.out.println(num1/num2);
        }
        catch(ArithmeticException ex)// Check for divide by zero exception
        {
            System.out.println("Divide by zero");
        }
    }

    if(sign == 'x') // to exit
    {
        flag = false
    }

    else
    {
        System.out.println("Error : Unknown Operator\n");
    }

}while(flag == true) // flag will be true until user enters 'x' as the choice to exit.
4

2 回答 2

4

您将 Scanner 对象分配给 int 变量,而不是编译。

您正在寻找的是:

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

我建议您阅读扫描仪文档: http ://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

于 2012-08-02T01:13:33.050 回答
0

首先,可能更紧迫的是,您的代码存在一些明显的语法问题。之前提到过,某些语句甚至无法编译——int num1 = new Scanner()这是不合适的,因为anint不是对象,并且空构造函数不是 new 的选择之一Scanner

其次,也可能是最重要的一点,你的程序有一个严格的、线性的流程。 假设我只想添加两个数字。好吧,我不走运,因为我每次都必须经历加、减、乘和除数字。

在这种情况下,合理地确定代码范围非常重要。使用方法来实现这一点。

public Long add(Long value1, Long value2) {
    return value1 + value2;
}

// and so forth

每当您想要执行特定操作时,您都可以通过捕获输入来实现 - 来自单词“add”、基于文本的菜单(输入 1 表示添加)或其他方式。

至于除以零,您不使用try...catch块。 通常,您会围绕您不想破坏的代码执行此操作,因此它在除法方法或尝试除法时很有用。

public Long divide(Long value1, Long value2) throws ArithmeticException {
    return value1 / value2;
}

当您使用该方法时,您会想要:

Long a = new Long(300);
Long b = new Long(0);

try {
    divide(a, b);
} except(ArithmeticException, ae) {
    System.out.println("Can't divide by zero");
}

我将项目的整体流程和构建留给您,但这应该会给您一个良好的开端。

于 2012-08-02T01:26:55.363 回答