В настоящее время я прохожу MOSC для Java OOP в Хельсинки и натолкнулся на один из вопросов.Я работаю над неделю 7, упражнение 8 , и когда я запускаю свой код вручную, у меня все в порядке, все в порядке.Однако, когда я запускаю их автоматизированные тесты, я получаю ошибку «NoSuchElementException».
Насколько я понимаю из JavaDoc , эта конкретная ошибка, скорее всего, вызвана .nextLine ()не найдя строки для чтения.Что меня смущает, так это основанное на сообщении об ошибке и расположении исключений, мое использование .nextLine () работает в некоторых местах, а не в других, когда я использую его таким же образом.Я включил свой класс, который я использую ниже.Спасибо всем за помощь, и если я пропустил предыдущий пост, похожий на этот, я прошу прощения.
import java.util.Scanner;
import java.util.ArrayList;
public class AirportPanel {
private Scanner reader;
private ArrayList<Airplane> airplanes;
private ArrayList<Flight> flights;
public AirportPanel(Scanner reader){
this.reader = reader;
this.airplanes = new ArrayList<Airplane>();
this.flights = new ArrayList<Flight>();
}
public void start(){
System.out.println("Airport panel");
System.out.println("--------------------\n");
while(true){
printMenu();
String input = readString();
if(input.toLowerCase().equals("x")){
break;
}else{
chooseOperation(input);
}
}
}
private void printMenu(){
System.out.println("Choose operation:");
System.out.println("[1] Add airplane" + "\n[2] Add flight" + "\n[x] Exit");
System.out.print("> ");
}
private void chooseOperation(String input){
if(input.equals("1")){
addPlane();
}else{
addFlight();
}
}
private void addPlane(){
System.out.print("Give plane ID: ");
String planeID = readString();
System.out.print("Give plane capacity: ");
String planeCap = readString();
this.airplanes.add(new Airplane(planeID, planeCap));
}
private void addFlight(){
System.out.print("Give plane ID: ");
String planeID = readString();
System.out.print("Give departure airport code: ");
String airport1 = readString();
System.out.print("Give destination airport code: ");
String airport2 = readString();
String airports = airport1 + "-" + airport2;
for(Airplane ap : this.airplanes){
if(ap.getID().equals(planeID)){
this.flights.add(new Flight(ap, airports));
}
}
}
private String readString(){
return this.reader.nextLine();
}
РЕДАКТИРОВАТЬ: Здесь это скриншот трассировки стека,Я также сделал репозиторий github со всеми моими файлами на случай, если это поможет больше.Я довольно новичок в кодировании, поэтому извините за беспорядок, который я наверняка создал для этих файлов.
РЕДАКТИРОВАТЬ 2: Я перешел к своему методу readString () и изменил свой вызов .nextLine () на.next () и это исправило мою проблему.Я не совсем уверен, как или почему, но теперь он отправляет правильно.