Как исправить область видимости переменной, созданной в цикле do-while? - PullRequest
0 голосов
/ 23 октября 2019

Я изо всех сил пытаюсь получить правильную область видимости для моей переменной "input".

Я делаю калькулятор для университетской задачи, и у меня все работает отдельно от того, когда я пытался сделать это цикломоборачивая мой основной код в цикл do-while. Поскольку переменная «input» объявлена ​​в части «do» цикла, она не знала, что это было, когда я пытался использовать ее в состоянии «while». Чтобы исправить это, я объявил «input» как строку перед циклом do-while, чтобы сделать его глобальным. Однако теперь сканер, который принимает значение ввода, не будет работать. Я делаю что-то глупое или я что-то упускаю?

import java.util.Scanner;

public class Calculator {

    public static void main(String [] args) {

        String input;

        do {

            System.out.println("Welcome to the calculator. Please enter an operator (+, -, /, *) below:");

            Scanner myScanner = new Scanner(System.in);
            String oper = myScanner.nextLine();

            System.out.println("Now please enter two numbers:");
            double a = myScanner.nextDouble();
            double b = myScanner.nextDouble();

            switch (oper) {
            case "+" :
                System.out.println(CalculatorUtils.add(a, b));
                break;
            case "-" :
                System.out.println(CalculatorUtils.subtract(a, b));
                break;
            case "/" :
                System.out.println(CalculatorUtils.divide(a, b));
                break;
            case "*" :
                System.out.println(CalculatorUtils.multiply(a, b));
                break;
            }

        System.out.println("Do you want to complete another calculation? (y/n)");
        input = myScanner.nextLine();


        }
        while (input.contentEquals("y"));

    }


}

Я ожидаю, что это будет вывод: Добро пожаловать в калькулятор. Пожалуйста, введите оператор (+, -, /, *) ниже: + Теперь введите два числа: 32,5 12,5 45,0 Вы хотите выполнить еще один расчет? (y / n) y (это то место, где код будет начинаться заново)

Однако я не могу ввести свои данные, когда меня спрашивают, не хочу ли я провести еще один расчет.

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Вот исправление.

import java.util.Scanner;

public class Calculator {

    public static void main(String[] args) {

        String input;

        do {

            System.out.println("Welcome to the calculator. Please enter an operator (+, -, /, *) below:");

            Scanner myScanner = new Scanner(System.in);
            String oper = myScanner.nextLine();

            System.out.println("Now please enter two numbers:");
            double a = myScanner.nextDouble();
            double b = myScanner.nextDouble();

            switch (oper) {
                case "+":
                    System.out.println(CalculatorUtils.add(a, b));
                    break;
                case "-":
                    System.out.println(CalculatorUtils.subtract(a, b));
                    break;
                case "/":
                    System.out.println(CalculatorUtils.divide(a, b));
                    break;
                case "*":
                    System.out.println(CalculatorUtils.multiply(a, b));
                    break;
            }
            myScanner.nextLine();
            System.out.println("Do you want to complete another calculation? (y/n)");
            input = myScanner.nextLine();
myScanner.nextLine();


        }
        while (input.contentEquals("y"));

    }


}

Это происходит потому, что во второй раз, когда вы звоните myScanner.nextLine(), он просто сканирует , введя ранее. Это произойдет после myScanner.nextDouble(), но не после myScanner.nextLine(), потому что myScanner.nextLine() читает / сканирует до включения следующего символа newLine (\n), тогда как myScanner.nextDouble () просто отсканирует двойное и уйдет.

Вот похожая тема

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

То, что вы не хотите сделать, - это создать Scanner при каждом обходе цикла. Переместите определение и инициализацию вашей переменной Scanner за пределы цикла:

    String input;
    Scanner myScanner = new Scanner(System.in);
    do {
        System.out.println("Welcome to the calculator. Please enter an operator (+, -, /, *) below:");

        String oper = myScanner.nextLine();

        // rest of loop...

    } while (input.contentEquals("y"));

Это может решить, а может и не решить вашу непосредственную проблему, но в целом это все же правильная вещь.

...