2013-09-23 3 views
1

Я работаю с довольно простой задачей программирования в Java. Нам предлагается создать чат-робот, где робот должен случайно ответить из набора заданных строк, пока пользователь не напишет «Bye!», Где робот просто ответит «Bye!». и завершить программу. Я написал следующий код:Java-while цикл не работает как ожидалось

import java.util.Scanner; 
import java.util.Random; 

public class Robot { 

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

    String[] answer = new String[6]; 
    answer[0] = "blabla1"; 
    answer[1] = "blabla2"; 
    answer[2] = "blabla3"; 
    answer[3] = "blabla4"; 
    answer[4] = "blabla5"; 
    answer[5] = "blabla6"; 
    boolean keepGoing = true; 


    System.out.println("Hello, how can I help you?"); 
    while (keepGoing) { 
     String input = in.next(); 
     int output = random.nextInt(6); 
     System.out.println(answer[output]); 

     if (input.equals("Bye!")){ 
      keepGoing = false; 
      System.out.println("Bye!"); 
     } 

    } 

} 

У меня есть две проблемы с программой:

  1. Время от времени, казалось бы, случайным образом, программа будет ответить с несколькими строками.
  2. При написании «Bye!» Программа бросает в другую строку перед тем, как писать «Bye!». Я знаю, что это может быть разрешено путем добавления «break;», но я подумал бы об этой плохой практике, поскольку я уже использую логическое значение. (Я бы продолжал использовать его.)

Я понятия не имею, почему возникают эти ошибки.

+2

ли, что код даже компилирует ? –

+3

'continue' является зарезервированным словом в java и не должен использоваться как переменная. Кроме того, вы используете переменную 'fortsett' в своем цикле, и она даже не определена. Довольно уверен, что код даже не будет компилироваться как есть. – jgm

+1

'continue' должен быть' fortsett' –

ответ

1

Проверьте состояние выхода до печати. Это позволит решить 2-й выпуск

while (true) { 
    String input = in.next(); 

    if (input.equals("Bye!")){ 
     System.out.println("Bye!"); 
     break;   
    } 
    int output = random.nextInt(6); 
    System.out.println(answer[output]); 
} 
+2

Продолжить? ты сэр? –

+0

1. Ваш стиль кодирования не согласован. 2. Для остановки цикла вам не требуется дополнительное логическое значение. Используйте break; когда вы хотите остановить цикл. Вот почему он существует. Итак: «while (;;)» и «break;» для остановки. – zmirc

+2

@zmirc: Вы имеете в виду 'for (;;) {}' и 'while (true) {}'! – tilpner

1

Измените программу как этот

import java.util.Scanner; 
import java.util.Random; 

public class Robot { 

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

    String[] answer = new String[6]; 
    answer[0] = "blabla1"; 
    answer[1] = "blabla2"; 
    answer[2] = "blabla3"; 
    answer[3] = "blabla4"; 
    answer[4] = "blabla5"; 
    answer[5] = "blabla6"; 
    boolean continue1 = true; 


    System.out.println("Hello, how can I help you?"); 
    while (continue1) { 
     String input = in.next(); 
     int output = random.nextInt(6); 
     if (input.equals("Bye!")){ 
     continue1 = false; 
      System.out.println("Bye!"); 
     }else 
     { 
      System.out.println(answer[output]); 
     } 

    } 

} 
} 
0

Использование ниже кода snappet для решения Issue2:

while (keepGoing) { 
     String input = in.next(); 
     int output = random.nextInt(6); 
     if(!input.equals("Bye!")) 
      System.out.println(answer[output]); 

     if (input.equals("Bye!")){ 
      keepGoing = false; 
      System.out.println("Bye!"); 
     } 
    } 
0
Scanner in = new Scanner(System.in); 
    Random random = new Random(); 

    String[] answer = new String[6]; 
    answer[0] = "blabla1"; 
    answer[1] = "blabla2"; 
    answer[2] = "blabla3"; 
    answer[3] = "blabla4"; 
    answer[4] = "blabla5"; 
    answer[5] = "blabla6"; 
    boolean keepGoing = true; 

    System.out.println("Hello, how can I help you?"); 
    while (keepGoing) { 
     String input = in.next(); 
     if ("Bye!".equals(input)) { 
      keepGoing = false; 
      System.out.println("Bye!"); 
     } else { 
      int output = random.nextInt(6); 
      System.out.println(answer[output]); 
     } 
    } 
0
import java.util.Scanner; 
import java.util.Random; 

public class Robot 
{ 

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

      String[] answer = new String[6]; 
      answer[0] = "blabla1"; 
      answer[1] = "blabla2"; 
      answer[2] = "blabla3"; 
      answer[3] = "blabla4"; 
      answer[4] = "blabla5"; 
      answer[5] = "blabla6"; 
      boolean keepGoing = true; 


      System.out.println("Hello, how can I help you?"); 
      while (keepGoing) 
      { 
       String input = in.next(); 
       int output = random.nextInt(6); 
       System.out.println(answer[output]); 

       if (input.equals("Bye!")) 
       { 
         keepGoing = false; 
         System.out.println("Bye!"); 
       } //This bracket is the only thing missing in your code. 
      }// End of while loop 

     } // End of main method 

}// End of class 
Смежные вопросы