Java计算器不执行if语句

时间:2014-01-17 04:18:07

标签: java if-statement calculator

我对编程比较陌生,最近开始学习Java以便进入Android编程。我以为我会创建一个非常简单的计算器来练习,但似乎我的if语句不起作用。

import java.util.Scanner;

public class Calculator {

    public static void main(String[] args) {
        //Create new scanner object
        Scanner numInput = new Scanner( System.in );

        //Enter first number
        System.out.println("Please enter the first number: ");
        int num1 = numInput.nextInt();

        //Enter the second number
        System.out.println("Please enter the second number: ");
        int num2 = numInput.nextInt();

        //Choose the operation to perform (+,-,*,/)
        System.out.println("What operation would you like to do?");
        System.out.println("Type \"+\" to add.");
        System.out.println("Type \"-\" to subtract.");
        System.out.println("Type \"*\" to multiply.");
        System.out.println("Type \"/\" to divide.");
        String opChoice = numInput.nextLine();


        //Add
        if (opChoice.equals("+")) {
            int ans = num1 + num2;
            System.out.println("Adding " + num2 + " to " + num1 + " equals " + ans + ".");
        }

        //Subtract
        else if (opChoice.equals("-")) {
            int ans = num1 - num2;
            System.out.println("Subtracting " + num2 + " from " + num1 + " equals " + ans + ".");
        }

        //Multiply
        else if (opChoice.equals("*")) {
            int ans = num1 + num2;
            System.out.println("Multiplying " + num2 + " with " + num1 + " equals " + ans + ".");
        }

        //Divide
        else if (opChoice.equals("/")) {
            int ans = num1 + num2;
            System.out.println("Dividing " + num1 + " by " + num2 + " equals " + ans + ".");
        }

    }

}

我正在使用Eclipse IDE,它运行正常,直到它询问要执行的操作。它会显示选项,但不会让我输入任何内容(我一直在测试它乘以5乘2)。

我搜索了类似的问题,并尝试了他们的建议,但它似乎仍然无效。我会感激任何帮助,我认为这可能只是我正在制作的一些简单错误,所以如果这看起来像一个愚蠢的问题,我道歉!

编辑:感谢您的快速回复,伙计们!我很感激。是的,我修正了乘法和除法。 :)

3 个答案:

答案 0 :(得分:5)

问题是nextInt()不会消耗(不读取)新行字符(按[Enter]时输入的字符)。解决此问题的一种方法是在每个nextLine()之后调用nextInt()

//Enter first number
System.out.println("Please enter the first number: ");
int num1 = numInput.nextInt();
numInput.nextLine(); // Add this

//Enter the second number
System.out.println("Please enter the second number: ");
int num2 = numInput.nextInt();
numInput.nextLine(); // Add this

解决此问题的另一种方法是使用nextLine()(返回String)读取数字,然后将其解析为int

int num1 = Integer.parseInt(numInput.nextLine());

您不需要添加额外的nextLine(),因为新线字符已被已调用的nextLine()使用。

另外,正如@sotondolphin建议的那样,您可能需要检查*/操作。

答案 1 :(得分:3)

问题是,当调用numInput.nextInt();时,您会获得输入的数字...但它会留下换行符(\n)。您对numInput.nextLine();的调用会得到一个空字符串。

numInput.next()替换该呼叫将解决问题,因为它的行为略有不同:

  

public String next()

     

查找并返回此扫描仪的下一个完整令牌。完整的标记之前和之后是与分隔符模式匹配的输入。

默认分隔符模式是空格,其中包括\n以及输入操作后输入流中的内容(使用*作为示例)现在是\n*\n

答案 2 :(得分:-1)

下面的代码执行了添加但不是预期的乘法和除法。你能查一下来源吗?

//Multiply
    else if (opChoice.equals("*")) {
        int ans = num1 + num2;
        System.out.println("Multiplying " + num2 + " with " + num1 + " equals " + ans + ".");
    }

    //Divide
    else if (opChoice.equals("/")) {
        int ans = num1 + num2;
        System.out.println("Dividing " + num1 + " by " + num2 + " equals " + ans + ".");
    }

}