java - java eclipse中的NoSuchElementException问题

标签 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

最佳答案

您必须检查是否有要获取的新 token ,其中 hasNext()方法,在每次调用 next() 之前方法。

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

Finds and returns the next complete token from this scanner. A complete token is preceded and followed by input that matches the delimiter pattern. This method may block while waiting for input to scan, even if a previous invocation of hasNext() returned true. [...]

NoSuchElementException - if no more tokens are available

并在 hasNext() 中具体说明方法:

Returns true if this scanner has another token in its input. This method may block while waiting for input to scan. The scanner does not advance past any input.

此外,为了改进您的源代码,您应该在循环之外一次性实例化您的扫描仪。

关于java - java eclipse中的NoSuchElementException问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53691481/

相关文章:

java - Eclipse 启动时退出代码 = 13

java - JDBC 事务错误处理

java - 在 spring 中通过 resttemplate 发出的每个请求发送客户端证书的正确方法是什么?

java - block 作用域变量

eclipse - Grails Assets 管道在Eclipse中显示错误的构建路径

java - NetBeans 或 Eclipse。我应该首先使用哪个 IDE?

java - 将控制台输出转换为 PDF 文件

java - 哈夫曼树算法难以理解

java - 错误 : setOnClickListener cannot be resolved

java - 在 Maven 中导入 GsonFactory