Цикл Do-while выполняется только дважды после ввода пользователем Y

#java #user-input #do-while

#java #пользовательский ввод #do-while

Вопрос:

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

После второго пользовательского ввода программа больше не считывает Y / N и не выполняет инструкцию. Если я смогу получить некоторую помощь в этом, я был бы очень признателен!

  switch(menuChoice)
          {
            // Insert
              case 1: 
                do {
                  System.out.println("Inserting to heap..." );
                  System.out.println();
                  ProcessInfo insertPI = readFile.readFile(rowIncrement  );
                  Integer K = insertPI.getPriority();
                  Entry<Integer, ProcessInfo> insertEntry = new EntryKV(K, insertPI);
                  maxHeap.insert(insertEntry);

                  System.out.println("Process ID: "   insertPI.getProcessID()   " and priority number "   insertPI.getPriority()   " have been inserted.");
                  System.out.println("Would you like to insert more? Please enter Y for yes and N for no");
                  YN = scan.next().charAt(0);
                }
                while (YN == 'Y' || YN == 'y');
                
                
            
              if (YN == 'N' || YN == 'n'){
                    break;
                  }
                  else{
                    System.out.println("Invalid input. Returning to menu.");
                    break;
                  }
  

Комментарии:

1. Вы пробовали отлаживать свой код? Я предполагаю, что вам следует заменить scan.next() на scan.nextLine() из-за того, как вы вводите свои данные.

2. Я сделал да, но это действительно не помогло. Я попробую это очень быстро.

3. Нет, @Amongalen, проблема не в этом. В общем случае nextLine() — плохая идея; если вы хотите читать строки по очереди, используйте scanner.useDelimiter("r?n") вместо этого. Теперь вам не нужно вводить пустые операторы nextLine(), которые прерываются, если пользователь когда-либо использует этот пробел.