1

オブジェクトを含むarrayListがあります。各オブジェクトには、いくつかの文字列が含まれています。これらの文字列を取得して、2次元配列に追加しようとしています。

public void iterateRow(Row row)
{ 
    int x = 0;
    int y = size();
    tableArray = new String[y][5];
    while(x < y){
       int z = 0;
       for (String s: row.rowString()){
          tableArray[x][z] = s;
          z++;
       }
       x++;
    }
}

行クラスの新しいインスタンスを実行して作成するときはいつでも、メソッドはRowに含まれる文字列を配列に追加する必要があります。ただし、最新のエントリをx回複製します(xはエントリの総数です)。

さらに参照できるように、Rowクラスを次に示します。

public class Row
{   
public String appNumber;
public String name;
public String date;
public String fileLoc;
public String country;
public String elementString;
public String results[];

public Row(String appNumber, String name, String date, String fileLoc, String country, Table table)
{
    this.appNumber = appNumber;
    this.name = name;
    this.date = date;
    this.fileLoc = fileLoc;
    this.country = country;
    table.addApplicant(this);
}

public String[] rowString()
{
    String[] a = {appNumber, name, date, fileLoc, country};
    return a;
}}

iterateRow()メソッドの論理エラーだと思いますが、何がわからないようです。どんな助けでもいただければ幸いです。

編集:みんなの助けの後、私はwhileループを削除しました。しかし、それでも次の行に移動するのではなく、行を複製しているように見えますか?

public void iterateRow(Row row)
{ int x = 0;
    int y = size();
    tableArray = new String[y][row.rowString().length];
    for(int i =0; i<y;i++){
    int z = 0;
    for (String s: row.rowString()){
       tableArray[x][z] = s;
       z++;
    }x++;}
} 
4

5 に答える 5

2

問題は while ループにあるようです。たとえば、size() が 3 を返す場合、while ループは x=0,1,2 で実行されるため、tableArray[0]、tableArray[1]、tableArray[2] の順に割り当てます。

コードにwhileループがある理由がまったく理解できないため、解決策が何であるかを判断するのは困難です。

于 2013-03-12T18:06:32.940 に答える
1

行のリストの各要素を反復処理したいようです

次のような方法を使用したい場合があります。

public void iterateRows(List<Row> rows) {
    int cols = 5;
    int row = 0, col = 0;
    tableArray = new String[rows.size()][cols];
    for(Row row : rows) {
        col = 0;
        for(String c : row.rowString()) {
            tableArray[row][col] = c;
            col++;
        }
        row++:
    }
}

ただし、5 つ以上の列がある場合は、独自のエラー チェックを実装することをお勧めします...

編集

これはおそらくプログラムで使用するのに最適な設計ではありません。新しい行が追加されたときに、古い行のそれぞれを反復処理する必要がないように変更することをお勧めします。

于 2013-03-12T18:30:46.563 に答える
0

メソッドは、呼び出されるたびにiterateRow再作成されます。ループtableArrayのため、オブジェクトは配列で複製された時間を取得します。whileRowy

iterateRowメソッドの外側で配列を作成し、while ループ (for ループのみ) を使用して配列の次のスロットに値を設定したくないのではないかと思います。

于 2013-03-12T18:03:48.373 に答える
0

Row のサイズに対して 2 次元配列のサイズを調整していません。

これは決定的な武器ではないかもしれませんが、実行する方がはるかに安全です

 tableArray = new String[y][row.rowString().length];

それ以外の

 tableArray = new String[y][5];
于 2013-03-12T18:04:23.953 に答える
0

これが実用的な目的なのか、IterateRow() がどのように呼び出されるのかはわかりませんが、これを機能させる論理的な方法は、最初に配列を宣言し、IterateRow (配列の参照と currentRow) に 2 つの引数を追加することです。次に、 iterateRow 内で while ループを取り除き、文字列のプロパティをループするだけです。

于 2013-03-12T18:32:01.057 に答える