2013-09-10 2 views
-1

Я пытаюсь сделать цикл while, который запрашивает ввод пользователя. Если пользователь набирает «привет», он будет печатать «привет», и если пользователь будет «делать», он закончит цикл, но если пользователь наберет что-нибудь еще или целое, он скажет «введите hi или done». Код приведен ниже:Проблема с использованием цикла while в java

public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 

    while(!(input.nextLine()).equals("done")){ 

     if((input.nextLine()).equals("hi")) 
     { 
      System.out.println("Hello"); 
     } 
     else 
     { 
      System.out.println("Type hi or done"); 
     } 
    }  
} 

Но с этим кодом он запрашивает ввод пользователя два раза, прежде чем он покажет результат. В чем проблема и как бороться с ней наиболее эффективным способом?

+7

Вы задаёте (до новой строки) дважды. –

+0

магазин input.nextLine() в строку и использование в случае if –

+1

Почему это становится downvotes? –

ответ

6

Вы должны только позвонить input.nextLine() один раз за цикл. Напишите свой код так:

package com.sandbox; 

import java.util.Scanner; 

public class Sandbox { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     String line; 
     while (!(line = input.nextLine()).equals("done")) { 

      if (line.equals("hi")) { 
       System.out.println("Hello"); 
      } else { 
       System.out.println("Type hi or done"); 
      } 
     } 
    } 


} 

, как вы написали выше, вы выбрасывая while «s line по телефону nextLine() в if заявлении.

1

Вы должны сохранить ввод как переменную, я назвал ее nextLine.

Scanner input = new Scanner(System.in); 
String nextLine = ""; 

while(!(nextLine.equals("done")){ 

    nextLine = input.nextLine(); 
    if((nextLine).equals("hi")){ 
     System.out.println("Hello"); 
    } else { 
     System.out.println("Type hi or done"); 
    } 
} 
+0

Вы вызываете 'nextLine()' дважды, прежде чем какой-либо выход будет сгенерирован. Вам нужно переместить 'nextLine = input.nextLine();' в конец цикла. – GriffeyDog

+0

Эм ... ты прав! Благодарю. – Gijs

0

Попробуйте следующее делать ... в то время как() цикл:

public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 

    do{ 
     String inputLine = input.nextLine(); 

     if(inputLine.equals("hi")) 
     { 
      System.out.println("Hello"); 
     } 
     else if(!inputLine.equals("done")) 
     { 
      System.out.println("Type hi or done"); 
     } 
    }while(!inputLine.equals("done")); 
} 
Смежные вопросы