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

最初に日付で並べ替え、次に時間で並べ替える必要があります。挿入ソートを使用していましたが、日付の最初の桁のみを読み取り、2 桁を無視していました。したがって、私の解決策は、日付を分割する別のスキャナーを用意し、それでソートすることでした。ただし、次のエラーが発生しているため、あまり詳しくは説明しませんでした。

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 を食べてはいけません。

4

1 に答える 1

3

宿題のヒント:

これを解決するには、IDE のデバッガを使用する必要があります。次の行にブレークポイントを設定します。

    Scanner dateScan = new Scanner(date);

そして何dateがあるか見てください。それでも問題が明らかでない場合は、デバッガーを使用して一度に 1 つずつステートメントを実行し、next呼び出しが何を返すかを監視します。(外側のループを数回回る必要があるかもしれません...)


PS私は問題が何であるかを見ることができると思います...しかし、私のアドバイスに従えば、自分ですぐに見つけることができるはずです. そして、デバッガの使い方を学びましょう :-)

于 2014-05-11T00:11:21.940 に答える