Как вывести пустую строку при получении пустой строки при l oop in java? - PullRequest
0 голосов
/ 02 апреля 2020

Я пытался создать калькулятор, который будет читать от 0 до 2 чисел в одной строке. Если он получает числа, он складывает их. Если введено только одно целое число, оно дублирует его как выходной. Если строка пуста, калькулятор также должен немедленно вывести пустую строку и продолжить запрашивать ввод. Тем не менее, он делает это, но не сразу, и пропускает строки только при вводе следующей строки номера. Итак, вот мой код

package calculator;

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String input = scanner.nextLine();
            //for the sake of stopping the code
            if (input.equals("/exit")) {
                System.out.println("Bye!");
                break;
            } else if (input.isEmpty()){
                System.out.println();
            }
            else{
                String[] array = input.split(" ");
                int[] numbers = new int[array.length];
                for (int i = 0; i < array.length; i++){
                    numbers[i] = Integer.parseInt(array[i]);
                }
                int sum = 0;
                for (int i = 0; i < numbers.length; i++){
                    sum += numbers[i];
                }
                System.out.println(sum);
            }

        }

    }
}

ОБНОВЛЕНИЕ

, исправленный путем изменения scanner.hasNext () на scanner.hasNextLine () исправил проблему.

1 Ответ

0 голосов
/ 02 апреля 2020

Оказывается, Scanner.hasNext блокировался до непустого ввода. Замена на Scanner.hasNextLine не блокирует пустую строку.

Вот как это сделать с BufferedReader. Он вернется, когда вы нажмете Enter даже с пустой строкой.

import java.io.*;
public class Main{
  public static void main(String[] args) throws Exception{
     BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
     boolean running = true;
     while( running ){
       String line = r.readLine();

       System.out.println("recv: " + line);
     }
  }
}
...