Java扫描程序无法正常工作

时间:2015-06-27 13:06:08

标签: java

抱歉,如果这听起来很愚蠢,但我是Java的新手,当我遇到困难时正在制作计算器程序。
我在程序之前已经使用扫描仪输入了输入,但是当我稍后尝试输入时,程序不接受输入并继续。
这是代码 -

import java.util.*;

public class calc {
    public static final Scanner input = new Scanner(System.in);
    public static void main(String[] args) {
        while(true) {
            calculate();
            System.out.print("Would you like to run again? Y/N: ");
            String repeat = input.nextLine().toLowerCase();
            if (!(repeat.equals("y") || repeat.equals("yes"))) {
               System.out.println("\nGoodbye!\n");
               break;
            }
        }
    }
    public static void calculate() {
        System.out.println("\nWelcome to THE CALCULATOR by PRATINAV BAGLA");
        System.out.print("\nAdd, Subtract, Multiply, Divide or Modulus? : ");
        double fsnum, scnum, ans;
        String choice = input.nextLine().toLowerCase();
        if(choice.equals("add") || choice.equals("subtract") || choice.equals("multiply") || choice.equals("divide") || choice.equals("modulus")) {
            System.out.print("Enter the first number: ");
            fsnum = input.nextDouble();
            System.out.print("Enter the second number: ");
            scnum = input.nextDouble();
            switch(choice) {
                case "add":
                    ans = fsnum+scnum;
                    break;
                case "subtract":
                    ans = fsnum-scnum;
                    break;
                case "multiply":
                    ans = fsnum*scnum;
                    break;
                case "divide":
                    ans = fsnum/scnum;
                    break;
                case "modulus":
                    ans = fsnum%scnum;
                    break;
                default:
                    ans = 0;
                    break;
            }
            System.out.println("The answer is: " + ans);
        } else {
            System.out.println("ERROR: Please select a valid operation.");
        }
    }
}

输出是 -

Welcome to THE CALCULATOR by PRATINAV BAGLA

Add, Subtract, Multiply, Divide or Modulus? : add
Enter the first number: 3
Enter the second number: 4
The answer is: 7.0
Would you like to run again? Y/N:
Goodbye!

正如您所见,跳过了最后一次再次运行的输入,程序似乎将其视为“”或null。 如果选择了无效操作,似乎不会发生这种情况。 -

Welcome to THE CALCULATOR by PRATINAV BAGLA

Add, Subtract, Multiply, Divide or Modulus? : yaya
ERROR: Please select a valid operation.
Would you like to run again? Y/N: n

Goodbye!

任何解决方案?

3 个答案:

答案 0 :(得分:1)

尝试在scnum = input.nextDouble()之后立即输入input.nextLine();我认为你需要摆脱换行符(nextDouble()不能读取)。 有关更好的解释,请参阅Using scanner.nextLine()。)

答案 1 :(得分:1)

Input.nextDouble()不会扫描新的行charcater。它会在遇到新的行字符时等待你给出一个数值,它会返回缓冲区中的新行字符。所以添加一个nextDouble()

之后的dummy input.nextLine()

答案 2 :(得分:1)

添加到atomSmasher所说的内容,您可以通过input.nextLine()替换input.next()的调用来轻松解决此问题。见下图

scanner issues