0

这是我第一次在这里发帖。我过去潜伏了很多,但这次似乎无法弄清楚我的问题是什么。这是家庭作业,我已经尝试自己解决。

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();

这在一定程度上解决了问题,但我不明白为什么扫描仪会跳过文件的第一部分,即“名称”。“name”变成了日期,“date”变成了时间,而“time”没有什么可抓取的,所以它不会抛出这样的元素。我正在做 nextLine,所以它不应该吃掉 \n。

4

1 回答 1

3

作业提示:

您需要使用 IDE 的调试器来解决此问题。在这一行设置断点:

    Scanner dateScan = new Scanner(date);

看看是什么date。如果这对您来说问题不明显,则使用调试器一次执行一个语句,观察next调用返回的内容。(您可能需要绕过外循环几次......)


PS我想我可以看到问题所在......但如果你按照我的建议,你应该能够很快自己找到它。并学习使用调试器:-)

于 2014-05-11T00:11:21.940 回答