0

Java プログラミングは初めてです... テキスト ファイルからデータを読み取って 2D 配列に保存しようとしています。基本的に、プログラムはパラメータ (IP) を受け取り、同じ IP 番号を持つファイルを探します。プログラムは各行を読み取り、2D 配列に格納します。

私の試み:

String ipNum = request.getParameter("ipNum");
String root = getServletContext().getRealPath("/");
String dailyPath = root + "\\" + ipNum +".txt";
int[][] myarray = new int[3][6];
    BufferedReader br = new BufferedReader(new FileReader(dailyPath));   
    String line = " ";
    String [] temp;
    while ((line = br.readLine())!= null){ 
        temp = line.split(" "); 
        for(int i = 0; i<myarray.length; i++) {
            for (int j = 0; j<myarray.length; j++) {    
                myarray[i][j] = Integer.parseInt(temp[i]);
            }
        }
    }

データ:

CPU 30 30 30 30 30 30
RAM 70 70 70 70 70 70
HAR 80 80 80 80 80 80
NET 100 100 100 100 100 100

私が抱えている問題は、配列を呼び出すと、常に 100 または 0 になることです (空の場合)

たとえば、myarray[1][2] は 30 を出力する必要がありますが、100 を取得します myarray [2][4] = 70 を取得しますが、100 を取得します...

過去数時間、コードをいじってみましたが、理解できません...私のコード全体が間違っているのでしょうか?

手伝ってくれてありがとう!

4

4 に答える 4

2

Joshsの発言に加えて、終了条件を間違った方法で設定しました。

for(int i = 0; i< myarray.length; i++) {
    for (int j = 0; j< myarray[i].length; j++) {    
         myarray[i][j] = Integer.parseInt(temp[i]);
    }
}

このようにして、配列を反復処理できますが、これを使用して問題を解決することはできません。代わりに、1つのwhileループと1つのforループを使用する必要があります。

于 2012-10-30T16:01:29.020 に答える
2

ええ、2回繰り返しているため、配列に最後の値を入力しています...次のコードを試してください:

int i = 0;
while ((line = br.readLine())!= null){ 
    temp = line.split(" "); 
    for (int j = 0; j<myarray[i].length; j++) {    
        myarray[i][j] = Integer.parseInt(temp[j]);
    }
    i++;
}

お役に立てれば...

于 2012-10-30T15:57:31.170 に答える
1

テキストの各行を読み、その行を 2D 配列に解析しているように見えます。各行が行と見なされる可能性があるため、これは完全には正しくありません。たぶん、while ((line = br.readLine())!= null)ループで読み取る各行にカウンターを使用し、カウンターインデックスで2D配列の行にのみ読み取ることができます...次のように:

int rowCounter = 0;
while ((line = br.readLine())!= null) {
    for(int i = 0; i<myarray.length; i++)
        myarray[rowCounter][i] = Integer.parseInt(temp[i]);
    rowCounter++;
}

補足として、多次元配列にインデックスを付けたい場合は、副次的な問題もあります。両方のループで、最大行数に達するまで繰り返します。列を通過する j ループの場合、これは問題を引き起こす可能性があります。代わりに、2D ループを使用する場合は次を試してください。

for(int i = 0; i < array.Length; i++)
    for(int j = 0; j < array[0].Length; j++)
        //Do some stuff
于 2012-10-30T15:56:55.293 に答える
1

「while」ループと最初の「for」ループは同様のタスクを実行しています。読み取る行ごとに、配列内のすべての行を反復処理し、読み取っている行でその列を埋めています。最後の行は 100 でいっぱいなので、すべての値は 100 です。

最初の「for」ループを削除して、「int i = 0;」と宣言することをお勧めします。'while' ループの前に、'i++' を for ループの一番下 (ただし内側) に置きます。

@Vivek は、j カウンターの 'my​​Array[ i ].length' を測定する必要があることを強調しています。

于 2012-10-30T15:50:55.330 に答える