2015-10-12 4 views
-4
//input: multiple integers with spaces inbetween 
    Scanner sc = new Scanner(System.in); 
    while(sc.hasNextInt()) 
    { 
     //add number to list 
    } 

sc.hasNextInt() ожидает integer. Он прорывается, если вы вводите символ non-integer.HasNextInt() Бесконечная петля

Я видел решение здесь не так давно, но я не могу найти его больше.

Решение (было лучше, если вы спросите меня) использовало два сканера. Я не могу понять, как он использовал два сканера, чтобы обойти эту проблему.

sc.NextLine() может быть?


Пользователь может ввести несколько целых чисел, количество которых неизвестно. Пример: 3 4 5 1. Между ними есть пространство. Все, что я хочу сделать, это прочитать целые числа и поместить их в список при использовании двух сканеров.

+0

Вы не можете использовать это, если вы хотите, чтобы выйти на какой-то момент - этот код будет блокировать _forever_ на входе. Как вы хотите, чтобы ваша программа знала, когда ввод выполнен? –

+0

Что такое 'sc' на основе? Вход в консоль? –

+3

Похоже, вы случайно удалили первую половину своего вопроса перед отправкой. Не могли бы вы добавить его обратно? – djechlin

ответ

0

Основываясь на ваш комментарий

Пользователь может ввести несколько чисел сумма неизвестна. Пример: 3 4 5 1. Между ними есть пространство. Все, что я хочу сделать, это прочитать целые числа и поместить их в список при использовании двух сканеров.

Вы, вероятно, ищете:

  • сканер, который будет читать строки из пользователей (и может ждать следующей строки, если это необходимо)
  • другой сканер, который будет обрабатывать расщепление каждое число из строки ,

Так что ваш код может выглядеть примерно так:

List<Integer> list = new ArrayList<>(); 
Scanner sc = new Scanner(System.in); 
System.out.print("give me some numbers: "); 
String numbersInLine = sc.nextLine();//I assume that line is in form: 1 23 45 

Scanner scLine = new Scanner(numbersInLine);//separate scanner for handling line 
while(scLine.hasNextInt()){ 
    list.add(scLine.nextInt()); 
} 
System.out.println(list); 
+0

Это именно то, что я считаю. Это то, что я хотел знать, как второй сканер использовался, чтобы накормить мое любопытство. Спасибо. Еще один быстрый вопрос, какова наилучшая практика для этого? – user3603865

+0

Нет лучшего решения, потому что решения зависят от того, как вы хотите, чтобы ваш код работал. Лучшие практики предлагают написать код, с которым легко работать сперва, и только изменять его, когда он заставляет систему работать медленно, поэтому я думаю, что это решение должно работать нормально для вас. – Pshemo

0

Попробуйте это:

while (sc.hasNext()) { 
    if (sc.hasNextInt()) { 
     // System.out.println("(int) " + sc.nextInt()); 
     // or add it to a list 
    } 
    else { 
     // System.out.println(sc.next()); 
     // or do something 
    } 
} 
+0

Я не думаю, что это сработает, потому что мы не потребляем вход? – user3603865

+0

, пожалуйста, переопределите свой код – Scitech

0
Scanner sc = new Scanner(System.in); 
    while(sc.hasNextInt()) 
    { 

     System.out.println("Hi"); 
     System.out.println("Do you want to exit ?"); 
     Scanner sc2 = new Scanner(System.in); 
     if(sc2.next().equalsIgnoreCase("Yes")){ 
      break; 
     } 
    } 
Смежные вопросы