Как прекратить чтение со сканера, если пользователь вводит заданное ключевое слово c? - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужно иметь возможность ввести случайное число целых чисел в консоли, а затем ввести специальный символ, такой как Q, когда я закончу. Тем не менее, я не уверен, как проверить, является ли ввод int или нет.

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

Я пробовал несколько разных способов. Я попытался с помощью hasNextInt. Я попытался nextLine, затем добавил каждый вход в ArrayList, а затем проанализировал вход.

List<String> list = new ArrayList<>();
String line;

while (!(line = scanner.nextLine()).equals("Q")) {
    list.add(line);
}

list.forEach(s -> os.write(parseInt(s)));

Это еще один l oop, который был у меня изначально, который проверяет правильность ввода, но я не уверен, как выйти из l oop, когда закончите.

while (x < 4) {
    System.out.print("Enter a value: ");

    while (!scanner.hasNextInt()) {    
        System.out.print("Invalid input: Integer Required (Try again):");
    }

    os.write(scanner.nextInt());
    x++;
}

Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Сделайте это следующим образом:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<Integer> list = new ArrayList<Integer>();
        String input = "";
        while (true) {
            System.out.print("Enter an integer (Q to quit): ");
            input = in.nextLine();
            if (input.equalsIgnoreCase("Q")) {
                break;
            }
            if (!input.matches("\\d+")) {
                System.out.println("This is an invalid entry. Please try again");
            } else {
                list.add(Integer.parseInt(input));
            }
        }
        System.out.println(list);
    }
}

Пробный прогон:

Enter an integer (Q to quit): a
This is an invalid entry. Please try again
Enter an integer (Q to quit): 10
Enter an integer (Q to quit): b
This is an invalid entry. Please try again
Enter an integer (Q to quit): 20
Enter an integer (Q to quit): 10.5
This is an invalid entry. Please try again
Enter an integer (Q to quit): 30
Enter an integer (Q to quit): q
[10, 20, 30]

Примечания:

  1. while(true) создает бесконечное l oop.
  2. \\d+ допускает только цифры, то есть только целое число.
  3. break вызывает разрыв l oop.

Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.

1 голос
/ 07 апреля 2020

Здесь вы go:

Scanner scanner = new Scanner(System.in);
List<Integer> list = new ArrayList<Integer>();

while (scanner.hasNext()) {
    String line = scanner.nextLine();

    if (line.equals("Q")) {
        scanner.close();
        break;
    }

    try {
        int val = Integer.parseInt(line);
        list.add(val);
    } catch (NumberFormatException e) {
        System.err.println("Please enter a number or Q to exit.");
    }
}
...