2015-10-07 3 views
1

Я делаю программу, которая берет строку от пользователя и отделяет ее слово за словом с разделителем, и она почти завершена. Однако после первого полного цикла следующий вход пользователя не проходит через последний цикл while.Как сохранить строковый ввод в цикле

Вот сегмент кода я говорю:

do 
    { 
    System.out.println ("\nEntered String: " + s1 + "\n"); 

    while (input.hasNext()) 
    { 
     word++; 

     System.out.println ("Word #" + word + ": \t" + input.next()); 
    } 
     System.out.print ("\nEnter 'q' to quit, enter string to continue: \t"); 
     s1 = scan.nextLine(); 

    } while (!s1.equals("q")); 

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

Любые советы?

EDIT: выяснить, прямо сейчас вывод мой код выглядит следующим образом:

Введите фразу: это есть предложение

Введенная строка: это есть предложение

Слово # 1 : это

Слово # 2: это

Слово # 3: а

Слово # 4: предложение

Введите «д», чтобы бросить курить, введите строку для продолжения: другое предложение

Введенная строка: другое предложение

Введите «д», чтобы бросить курить, введите строку для продолжения:

мне нужно «другое предложение», чтобы распечатать, как «это предложение»

+0

Возможный дубликат [Java: в то время как цикл - утверждение точкой с запятой перед выходом в операторы между фигурными скобками?] (HTTP: // StackOverflow.com/questions/12658242/java-while-loop-statement-with-a-semicolon-before-going-in-statements-betwe) –

+0

Какова ценность 'input'? – nubteens

+0

вход для разделителя, который предназначен для строки s1, которую вводит пользователь. Он работает почти так же, как здесь: http://javatutorialhq.com/java/util/scanner-class-tutorial/hasnext-string-pattern-method-example/, но я изменил свой код, чтобы он позволял вводить пользователя от сканера. – Len

ответ

0

Я не понимаю, что именно проблема, так как ваш код не компилируется. Но нет необходимости в другом цикле. Вот немного кода, который работает:

Scanner scan = new Scanner(System.in); 
System.out.print("\nEnter a sentence:"); 
String s1 = scan.nextLine(); 

do 
{ 
    System.out.println("\nEntered String: " + s1 + "\n"); 

    Scanner input = new Scanner(s1); 
    int word = 0; 
    while (input.hasNext()) 
    { 
     word++; 
     System.out.println("Word #" + word + ": \t" + input.next()); 
    } 

    System.out.print("\nEnter 'q' to quit, enter string to continue: \t"); 
    s1 = scan.nextLine(); 

} while(!s1.equals("q")); 

scan.close(); 
+0

Это исправлено! Мне просто нужно было поместить вход сканера в цикл do-while. Благодаря! – Len

0

Вы можете попробовать это, если он работает. Он имеет те же результаты с тем, который вам нужен.

Scanner scan = new Scanner(System.in); 
    String s1 = scan.nextLine(); 
    do { 
     String input[] = s1.split(" "); 
     System.out.println ("\nEntered String: " + s1 + "\n"); 
     for(int i = 0; i < input.length; i++) { 
      System.out.println ("Word #" + i+1 + ": \t" + input[i]); 
     } 
     System.out.print ("\nEnter 'q' to quit, enter string to continue: \t"); 
     s1 = scan.nextLine(); 
    } while (!s1.equals("q")); 
0

Вы используете

while (input.hasNext()) 

Я полагаю, ввод объекта сканера, так что вы должны сделать что-то вроде этого, прежде чем использовать его (но перед входом в цикл):

Scanner input = new Scanner(System.in); 
0

Вместо использования scanner.next() в цикле while я бы рекомендовал сделать следующий API:

String.split 
Scanner.nextLine 

Что-то вроде этого:

while(input.hasNextLine()) { 
    String line = input.nextLine(); 
    String[] words = line.split("delimeter"); 
    if(words.length < 1 || words[words.length - 1].equals("q")) { 
     break; 
    } 
} 
Смежные вопросы