1

私は CLI スプレッドシート プログラムでプロジェクトを行っていました。このコードを使用してファイルから入力しました:

    DataInputStream in=new DataInputStream(System.in);
    System.out.print("\nEnter filename (with path) - ");
    String fn=in.readLine();
    FileReader fr=new FileReader(fn);
    BufferedReader br=new BufferedReader(fr);

    String sen="";
    while(true)
    {
        String sn=br.readLine();
        if(sn==null)
            break;
        sen=sen+sn;
    }
    StringTokenizer st=new StringTokenizer(sen,"|");
    String s[][][]=new String[(st.countTokens()/9)][9][3];
    int r_0=(st.countTokens()/9);
    int r,c;
    r=c=0;

    for(int i=0;i<st.countTokens();i++)
    {
        StringTokenizer st1=new StringTokenizer(st.nextToken(),"ɰ");
        s[r][c][0]=st1.nextToken();
        s[r][c][1]=st1.nextToken();
        s[r][c][2]=st1.nextToken();

        System.out.println(s[r][c][0]+"\t"+s[r][c][1]+"\t"+s[r][c][2]); // to be deleted
        c++;
        if(c==9)
        {
            r++;
            c=0;
        }
    }

スプレッドシートには、デフォルトで 8 行 (合計 9 行) が表示されます。5 行 5 列まで (または s[5][5][0/1/2] まで)、プログラムはファイルから値を正しく読み取ります。しかしその後、null 値の読み取りを開始します。この通常の行動からの突然の逸脱の理由を知りたいです。メモリ使用量と関係がありますか?[更新 - 具体的には [5,5,0] ではなく、セル数の半分の後に発生しています]

サンプル入力:

 ɰ     ɰ     |Aɰ     ɰ     |Bɰ     ɰ     |Cɰ     ɰ     |Dɰ     ɰ     |Eɰ     ɰ     |Fɰ     ɰ     |Gɰ     ɰ     |Hɰ     ɰ     |1ɰ     ɰ     |8ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |2ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |3ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |4ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |5ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |6ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |
4

1 に答える 1

3

forループを次のように交換する必要があります

while (st.hasMoreTokens())

-ループの代わりにfor。とにかくを使用していませiん。

また、countTokens()関数はトークンの取得中にその値を変更します ( Javadocを参照) 。

于 2013-09-27T13:20:56.423 に答える