2015-02-12 3 views
-2

У меня проблема с домашней работой:Программа не выходит, когда я нажимаю n или N?

Q1. Используйте вложенные для операторов циклов рисования пустых полей любого символа (ввод от пользователя). Ящики имеют одинаковое количество строк и столбцов (ввод от пользователя, допустимый диапазон: от 5 до 21). Тест на наличие ошибок ввода (включая тип)

SAMPLE OUTPUT:

Do you want to start(Y/N): y 
How many chars/last row? n 
Not an integer! Try again! How many chars/last row? fgfgfg 
Not an integer! Try again! How many chars/last row? 7.6 
Not an integer! Try again! How many chars/last row? 34 
ERROR! Valid range 5 - 21. How many chars/last row? 7 
What character? k 

Do you want to continue(Y/N): y 

Я написал следующий код, но он не выходит, когда я ударил «п» или «N», и я не уверен, почему. Как я могу это исправить?

public static void main(String[] args) { 
    Scanner input = new Scanner(System. in); 
    char answer = 'n'; 
    int row = 0; 
    char output = 'k'; 

    do { 
     System.out.println("DO YOU WANT TO START Y OR N?"); 
     answer = input.next().charAt(0); 
     System.out.println("enter the number of rows"); 

     while (!input.hasNextInt()) { 
      System.out.println("Not an integer,try again "); 
      input.next(); 
     } 

     row = input.nextInt(); 


     while (row < 5 || row > 21) { 
      System.out.println("ERROR! Valid range 5 - 21. How many chars/last row?"); 
      row = input.nextInt(); 
     } 
     System.out.println("WHAT CHARACTER?"); 
     output = input.next().charAt(0); 

     for (int i = 0; i < row; i++) { //nested for loop to create the box 
      System.out.print(output); 
     } 
     System.out.println(); 

     for (int i = 0; i < row - 2; i++) { 
      System.out.print(output); 
      for (int j = 0; j < row - 2; j++) { 
       System.out.print(" "); 
      } 
      System.out.print(output); 
      System.out.println(); 
     } 
     for (int i = 0; i < row; i++) { 
      System.out.print(output); 
     } 
     System.out.println(); 
     System.out.println(); 
     System.out.println("DO YOU WANT TO CONTINUE ? Y OR N"); 
     answer = input.next().charAt(0); 

    } while (answer == 'Y' || answer == 'y'); 

    input.close(); 
    System.out.println("game stop"); 
} 
+0

где вы задали условие для ключа 'n'? – Apurva

+0

Ну, он не выйдет до тех пор, пока не достигнет конца цикла do-while –

ответ

2

Вам нужно добавить условие N после Do you want to start(Y/N): и Do you want to continue(Y/N):

System.exit(0) используется для завершения программы.

Поместите этот код

System.out.println("DO YOU WANT TO START Y OR N?"); 
    answer = input.next().charAt(0); 
    if(answer == n || answer == N){ 
     System.exit(0); 
    } 

И это для Do you want to continue(Y/N):

System.out.println("DO YOU WANT TO CONTINUE ? Y OR N"); 
    answer = input.next().charAt(0); 
    if(answer == n || answer == N){ 
     System.exit(0); 
    } 

Редактировать

Если вы хотите напечатать 'Game Stop', если ответ N, а затем использовать Thread.sleep(timeInMilliseconds); до System.exit(0)

if(answer == n || answer == N){ 
    Thread.sleep(5000); //This will make console wait for 5 seconds before exiting. 
    System.out.println("Game Stop."); //game stop will be printed for 5 seconds 
    System.exit(0); 
} 
+1

Вы можете использовать 'System.exit (0);', или вы можете использовать 'break;' вместо этого, если вы хотите напечатать последний 'System.out.println (« stop игры »);'. – miselking

+0

Спасибо всем. –

+1

@ChhetriCamy см. Я отредактировал свой ответ и добавил, как печатать 'stop игры' – Apurva

0

Самый простой способ сделать это:

Проверка на входе «N» в цикле, и выйти из цикла в то время как, возможно, например, так:

if ((answer == 'n') || (answer == 'N')) { 
    break; 
} 

Кроме того, вы проверяете вход y/n 2 раза в этой программе. Лучшим способом написания этого было бы использовать обычный цикл while вместо цикла do-while; ясно, что в вопросе, если вы сначала вводите N, вы вообще не должны запускать программу. Цикл Do-While полезен для обеспечения того, что программа запускается хотя бы один раз (что не должно произойти здесь, программа должна запускаться только в том случае, если вход действителен, например: «y»). При использовании DW-цикла «ok», цикл while будет служить цели лучше здесь.

Ваш цикл может быть записан как так вместо того, чтобы:

// you need this line to initially print the y/n question. 
System.out.println("DO YOU WANT TO START Y OR N?"); 
// get an input and check if it is not n 
while (Character.toUpperCase(input.next().charAt(0)) != 'N') {  
    // do stuff here 
    System.out.println("DO YOU WANT TO CONTINUE ? Y OR N"); // ask for next input 
} 
+0

Я не могу использовать if statement –

+0

Что вы имеете в виду? Вам не разрешено использовать оператор if вообще? – miselking

+0

@ChhetriCamy Добавлен сегмент, который не использует оператор if. – Aify