簡體   English   中英

讀取文件時出現NoSuchElementException

[英]NoSuchElementException when reading in file

這是我第一次在這里發帖。 我過去已經潛伏了很多,但似乎無法弄清楚這次我的問題是什么。 這是用於作業,我已嘗試自己解決。

public class Driver {

public static void main(String[] args) throws FileNotFoundException {

        String name = "", date = "", time = "";
        String month = "", day = "", year = "";

        ArrayList<Customer> customerArray = new ArrayList<Customer>();
        ArrayList<Date> dateArray = new ArrayList<Date>();

        File myFile = new File("./src/Program4/Customers.csv");

        Scanner fileScan = new Scanner(myFile);

        while (fileScan.hasNext()) {
            String lineString = fileScan.nextLine();

            Scanner lineScan = new Scanner(lineString);
            lineScan.useDelimiter(",");

            while (lineScan.hasNext()) {

//              if (lineScan.next().equalsIgnoreCase("Name") == true
//                      || lineScan.next().equalsIgnoreCase("Date") == true
//                      || lineScan.next().equalsIgnoreCase("Time") == true) {                  
//                  lineScan.next();                    
//              } 
            //  else {      

                    name = lineScan.next();
                    date = lineScan.next();
                    time = lineScan.next();                     

                    Scanner dateScan = new Scanner(date);
                    dateScan.useDelimiter("/");

                    while (dateScan.hasNext()) {
                        month = dateScan.next();
                        day = dateScan.next();
                        year = dateScan.next();
                    }

                    Customer newCustomer = new Customer(name, date, time, day,
                            month);
                    customerArray.add(newCustomer);
                //}
            }
        } } }

被注釋掉的部分只是我在查看是否是問題所在,因為我擔心它不起作用的原因是因為標頭中沒有任何“ /”。 但是,事實並非如此。 這是我正在讀取的文件的示例:

Name    Date    Time
SK]CD[TUI   12/3/2014   5:41 AM
KXFPPHXPK   12/9/2014   7:43 AM
RVZTA[KLT   7/17/2014   9:35 AM
AUTVFXVZW   12/27/2014  2:39 AM
CFH\XBJRE   2/3/2014    9:51 AM
RT@KNCPHO   4/19/2014   8:42 AM

我必須先按日期排序,然后再按時間排序。 我正在使用插入排序,但它只讀取日期的第一位數字,而忽略了兩位數。 因此,我的解決方案是讓另一台掃描儀分解日期,然后按此排序。 不過,我並沒有太過深入,因為我遇到了以下錯誤。

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at Program4.Driver.main(Driver.java:55)

第55行是:

day = dateScan.next();

因此,不知道問題出在哪里。 希望我的方法是最好的分類方法,如果不是,最好是有人可以節省我一些時間並提出替代方法。

謝謝!

====================

編輯:

好吧,我知道了最初的問題。 我添加了這個:

    if (lineScan.next().equalsIgnoreCase("Name") == true) {
        lineScan.nextLine(); } 
else {

    name = lineScan.next();
    date = lineScan.next();
    time = lineScan.next();

這在某種程度上解決了問題,但是我不知道為什么掃描程序會跳過文件的第一部分“名稱”。 “名稱”變為日期,“日期”變為時間,“時間”沒有任何可搶奪之處,因此不會拋出任何此類元素。 我正在做nextLine,所以它不應該吃\\ n。

作業提示:

您需要使用IDE的調試器來解決此問題。 在此行設置一個斷點:

    Scanner dateScan = new Scanner(date);

看看是date 如果那對您來說仍然沒有使問題變得明顯,那么請使用調試器一次執行一個語句,觀察next調用將返回什么。 (您可能需要繞過外圈幾次...)


附言:我認為我可以理解問題所在……但是,如果您遵循我的建議,您應該可以自己迅速找到它。 並學習使用調試器:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM