Могу ли я получить некоторую помощь, чтобы понять, что вызывает мое «NoSuchElementException»? - PullRequest
0 голосов
/ 11 февраля 2019

В настоящее время я прохожу 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 () и это исправило мою проблему.Я не совсем уверен, как или почему, но теперь он отправляет правильно.

...