Сканер nextLine () пропускается после nextInt () - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь создать программу-калькулятор, которая зацикливается, где пользователь может ввести число, а затем операцию, которую он желает выполнить над этим номером, пока он не введет "=" в качестве оператора. Переменная, содержащая результат, инициализируется как ноль в классе, и применяется оператор по умолчанию "+".

import java.util.Scanner;

public class main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        Calculator c = new Calculator();
        boolean flow = true;

        while(flow) {
            System.out.println("Number :");
            int userEntry = scan.nextInt();
            System.out.println("Operator :");
            String operation = scan.nextLine();

            switch(operation) {
            case "+":
                c.setOperation(Calculator.ADDITION);
                break;
            case "-":
                c.setOperation(Calculator.SOUSTRACTION);
                break;
            case "*":
                c.setOperation(Calculator.MULTIPLICATION);
                break;
            case "=":
                c.getResult();
                return;
            default:
                System.out.println("Please enter a valid operator.");
            }
            c.apply(userEntry);
            c.getResult();
        }
    }
}

Но каждый раз, когда я пытаюсь запустить программу, я получаю этот результат

Number :
4
Operator :
Please enter a valid operator.
Number :
67
Operator :
Please enter a valid operator.
Number :

Программа не позволяет мне вводить вход в оператор и напрямую переходить к следующему входу int. Я пытался написать это разными способами, например, вытащить эту часть из цикла, но это все та же ошибка, и я не могу понять, что вызывает это. Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 27 октября 2019

Это потому, что функция nextInt не читает символ новой строки. Вам нужно использовать этот символ, прежде чем вы сможете снова ввести пользовательский ввод

, просто добавьте оператор scan.nextLine(); после nextInt вызова функции.

System.out.println("Number :");
int userEntry = scan.nextInt();

scan.nextLine();   // this will consume the new line character

System.out.println("Operator :");
String operation = scan.nextLine();

Подробнее об этом см. сканер пропускает пользовательский ввод

...