Java Eclipse中的NoSuchElementException问题

时间:2018-12-09 10:44:30

标签: java eclipse

我使用Java eclipse,它显示有:

java.util.NoSuchElementException.

有人可以帮助我解决这个问题吗?

似乎错误发生在:

String city = scin3.next();

控制台说:

java.util.Scanner.throwFor and java.util.Scanner.next.

下面是我的代码:

package p1;

import java.io.File;
import java.io.IOException;
import java.util.*;

class Connection {
private String departure;
private String arrival;

Connection () {};
Connection (String departure, String arrival) {
    this.departure = departure;
    this.arrival = arrival;
}
String getDeparture() {return departure;}
String getArrival() {return arrival;}
}

public class H4_20160235_1 {
public static void main(String[] args) 
{
    ArrayList<Connection> list = new ArrayList<Connection>();
    File file = new File("connection.txt");
    Scanner scin1;
    if (file.exists()) {
        try {
        scin1 = new Scanner(file);
        while (scin1.hasNext()) {
            String departure = scin1.next();
        String arrival = scin1.next();
        Connection c = new Connection(departure, arrival);
        list.add(c);                        
            }
        scin1.close();
        } catch (IOException e) {}
    }
    else {
        System.out.println("connection.txt not exist!!");
    }

    LinkedList<String> route = new LinkedList<String> ();

    System.out.println("---------------------------------------");
    System.out.println("Welcome to Flight Tour NORANG Ballon !!");
    System.out.println("---------------------------------------");
    System.out.println();

    System.out.println("<<< Flight Information >>>");
    for (Connection l: list) {
        System.out.printf("%s -> %s", l.getDeparture(), l.getArrival());
        System.out.println();
    }
    System.out.println();
    Set<String> set = new LinkedHashSet<String>();
    for (int a=0; a<list.size(); a++) 
        set.add(list.get(a).getDeparture());

    System.out.println("---------------------------------------");
    System.out.println("<<< Cities in the DB >>>");
    System.out.println("---------------------------------------");
    for (String city: set) { 
        System.out.printf("%s", city);
        System.out.println();
    }
    System.out.println("---------------------------------------");
    System.out.println();

    System.out.println("Let's plan a round-trip route!");
    Scanner scin2 = new Scanner(System.in);
    System.out.print("Enter the starting city : ");
    String departure = scin2.next();
    scin2.close();
    route.add(departure);
    System.out.printf("From %s you can fly directly to :", departure);
    System.out.println("\n");

    ArrayList<String> cities = new ArrayList<String> ();
    for (Connection l : list) {
        if (departure.equals(l.getDeparture())) {
            cities.add(l.getArrival());
            System.out.println(l.getArrival());
        }
    }
    System.out.println();
    System.out.println("---------------------------------------");

    int i = 0;
    while (true) {
        Scanner scin3 = new Scanner(System.in);
        System.out.printf("Where do you want to go from %s?", route.get(i));
        String city = scin3.next();
        scin3.close(); 
        i++;
        if (cities.contains(city) == false)
            System.out.println("***** You can't get to that city by a direct flight. *****");
        if (route.contains(city) == true) 
            break;
        ArrayList<String> cities2 = new ArrayList<String>();
        for (Connection l: list) {
            if (city.equals(l.getDeparture())) {
                cities2.add(l.getArrival());
                System.out.println(l.getArrival());
            }
        }
    }

    System.out.println("=====================================");
    System.out.println("<<<  Your Final Route  >>>");
    Iterator <String>iter = route.iterator();
    while (iter.hasNext()) {
        String temp = (String)iter.next();
        System.out.println(temp);
    }
    System.out.println("---------------------------------------");
    System.out.println();
    System.out.println("Have a nice Trip with NORANG Ballon ~");                       
}

}

下面是我的connection.txt文件。

SanJose SanFrancisco 
SanJose Anchorage 
NewYork Anchorage 
NewYork SanJose 
NewYork SanFrancisco 
NewYork Honolulu 
Anchorage NewYork 
Anchorage SanJose 
Honolulu NewYork 
Honolulu SanFrancisco 
Denver SanJose 
SanFrancisco NewYork
SanFrancisco Honolulu 
SanFrancisco Denver

1 个答案:

答案 0 :(得分:0)

在每次调用hasNext()方法之前,必须使用next()方法检查是否有新令牌可以获取。

就像您可以在next()方法的文档中看到的一样:

  

查找并返回此扫描仪的下一个完整令牌。一种   完整令牌的前面和后面都有与   定界符模式。等待输入到该方法时可能会阻塞   扫描,即使先前调用hasNext()返回true。 [...]

     

NoSuchElementException-如果没有更多令牌可用

hasNext()方法中有专门说明:

  

如果此扫描仪的输入中包含另一个令牌,则返回true。等待输入扫描时,此方法可能会阻塞。扫描仪不   超越任何输入。

此外,为了改善源代码,您应该在循环外将所有扫描程序实例化一次。