Я пытаюсь прервать цикл while, нажимая клавишу Enter на клавиатуре. Мой код:

package javaapplication4;
import java.util.ArrayList;
import java.util.Scanner;

public class JavaApplication4 {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        ArrayList<Double> numbers = new ArrayList( );
        while (true) {
            System.out.println("Please enter the numbers seperated by a space: ");
            numbers.add(keyboard.nextDouble());
           //want the while loop to break here by pressing "enter" after entering array values
        }
        System.out.println(numbers);
    }
1
aarontemp 23 Фев 2016 в 00:37

3 ответа

Лучший ответ

Не используйте цикл для получения ввода или nextDouble. На самом деле вам нужна одна строка ввода, которую вы затем разбиваете на список двойников. Поэтому используйте nextLine, разделите его и проанализируйте каждый элемент. Что-то вроде этого:

Scanner keyboard = new Scanner(System.in);
ArrayList<Double> numbers = new ArrayList( );
String input = keyboard.nextLine();
for(String item : input.split(" ")){
    numbers.add(Double.parseDouble(item));
}

Это игнорирует любые проверки ввода, но показывает общий подход.

Это будет работать, потому что после того, как вы нажмете "Enter", первая строка закончится, что означает, что сканер может пройти мимо nextLine в большую часть вашего кода. Поскольку вы никогда не пытаетесь больше ничего читать, он не блокирует ожидание ввода и может успешно выйти после завершения.

2
resueman 22 Фев 2016 в 21:59
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;

public class JavaApplication4 {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        ArrayList<Double> numbers = new ArrayList();
        System.out.println("Please enter the numbers seperated by a space: ");

        String line = keyboard.nextLine();
        StringTokenizer token = new StringTokenizer(line, " ");
        while(token.hasMoreTokens()) {
            numbers.add(Double.parseDouble(token.nextToken()));
        }

        System.out.println("Numbers: " + numbers);

    }

}

1
csteel 22 Фев 2016 в 21:57

Мне нравится использовать try {...} catch (NumberFormatException), поэтому, когда вы получаете пустую строку (т.е. вводите), ваш блок catch активируется и вы выходите из цикла

try {
    while (true) {
      System.out.println("Please enter the numbers seperated by a space: ");
      numbers.add(keyboard.nextDouble());
      //want the while loop to break here by pressing "enter" after entering array values
    }
} catch (NumberFormatException ex) {}
System.out.println(numbers);
1
ControlAltDel 22 Фев 2016 в 21:42