首页 文章

java eclipse中的NoSuchElementException问题

提问于
浏览
1

我使用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

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

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

    查找并返回此扫描仪的下一个完整令牌 . 在完成令牌之前和之后是与分隔符模式匹配的输入 . 即使之前的hasNext()调用返回true,此方法也可能在等待输入扫描时阻塞 . [...] NoSuchElementException - 如果没有更多令牌可用

    并在hasNext()方法中明确说明:

    如果此扫描器的输入中有另一个标记,则返回true . 在等待输入扫描时,此方法可能会阻塞 . 扫描仪不会超过任何输入 .

    此外,为了改进您的源代码,您应该在循环之外为所有人实例化一次扫描程序 .

相关问题