2015-01-03 2 views
-1

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

У меня возникла проблема при создании раздела возврата приложения.

В настоящее время, если пользователь заимствует руководство и хочет его вернуть, он должен ввести заголовок руководства из списка заимствованных руководств. Однако, если пользователь хочет вернуть любое руководство после первого в этом списке, ничего не происходит. Пользователь вводит имя и нажимает клавишу ввода, но приложение просто останавливается.

Вот пример ошибки я описываю:

enter image description here

Вот соответствующий код:

static void returnManual(){ 
    System.out.printf("\n\nHere are the Manual/s currently out on loan:\n\n"); 
    if(ManualList.get(ManualChoice).status.equalsIgnoreCase(status2) && borrowedManuals.size() >= ManualChoice){ 
     for (int i = 0; i < borrowedManuals.size(); i++) 
      System.out.println(borrowedManuals.get(i).displayManual()); 
     returnManualTitle = Console.readString(Messages.enterManualTitle, Messages.tooShortMessage, 3); 
    } 

    int x = 0; 
    boolean titleExistance = false; 
    while (x < ManualList.size()){//Search for the Manual by title, if it exists change it's status, 
           //it's borrower and borrowDate. 

     if (ManualList.get(x).title.equalsIgnoreCase(returnManualTitle)){ 

      ManualList.get(x).status = "Available"; 
      ManualList.get(x).borrower = "N/A"; 
      ManualList.get(x).borrowDate = "N/A"; 
      ManualList.get(x).returnDate = "N/A"; 

      int p = 0; 
      borrowLoop: 
      while (p < borrowedManuals.size()){//Search for the Manual by title, if it exists change it's status, 
       //it's borrower and borrowDate. 

       if (borrowedManuals.get(p).title.equalsIgnoreCase(returnManualTitle)){ 

        borrowedManuals.remove(p); 
        break borrowLoop; 
       } 

      }    
      System.out.println(Messages.successReturnMessage); 
      titleExistance = true; 

      break;//if a title is found, break out of the loop and display choice menu. 
     } 
     x = x+1; 
    }//end of while loop. 
    if(titleExistance == false){ 
     boolean repeatReturnManual = Console.readYesNo("\n--------------------------------------------------------------------------" + "\n\nThe Manual with the title "+"\""+returnManualTitle +"\""+ " wasn't found!" 
                 +"\n\nDo you want to try again? (Y/N):\n"); 
     System.out.println("\n--------------------------------------------------------------------------"); 
     if(repeatReturnManual){ 
      returnManual(); 
     }else{ 
      Menu.displayMenu(); 
     } 
    }else if(titleExistance){ 
     Menu.menuChoice = 7; 
    }    
} 

/** 
* Removes the Manual. 
*/ 
+1

Вероятно, показывают нам, как/где вы используете ' returnManualTitle' и добавьте некоторый вывод трассировки, чтобы увидеть, где проблема. – PeterMmm

+1

Я не вижу, где вы ожидаете строку «Пожалуйста, введите название ...»? – SMA

+1

Как вы проводите ввод? – SonOfSun

ответ

1

p в borrowsManual while цикл должен быть увеличен, иначе он будет работать в бесконечном lopp.

while (p < borrowedManuals.size()) { 
    Manual borrowed = borrowedManuals.get(p); // guessing the name of this class 
    if (borrowed.title.equalsIgnoreCase(returnManualTitle)) { 
     borrowedManuals.remove(p); 
     break; 
    } 
    p++; // this is mising 
}   

(я не уверен, если это весь линейный поиск бизнес настолько хорошо, но мы не хотим, чтобы переписать все приложение, верно? :)

+0

Спасибо за ваш ответ, можно ли показать мне рабочий пример того, что вы имеете в виду? Я новичок в Java, поэтому мне трудно понять :( – Oscar

+1

@JamesPatterson Ответчик означает добавление оператора 'p ++;' или '++ p;' перед закрывающей скобкой вашего цикла с надписью 'loanLoop'. – bcsb1001

+1

@JamesPatterson i добавлен код для приращения (не одобряющий остальную часть кода :) – eckes

0

Ваш метод не имеет правильный тип возвращаемого значения. Измените возвращаемый тип на String и поместите строку с Console.readString() вне цикла for. Надеюсь, это поможет!

+1

'Console.readString()' не находится в цикле. OP должен правильно форматировать код. – PeterMmm