1
プロジェクトでは、与えられたスコアの最大値を計算する必要があります。その後、この特定の行と関連する列は、すべての行で1つの最大値を取得するために削除する必要があります。だから私の結果は次のようになります。繰り返しごとに2次元配列の列と行を削除する
結果
これは私がこれまで持っているものです。
float max = Float.MIN_VALUE;
int remove_row = firstCluster.size()+1;
int remove_column = firstCluster.size()+1;
float[ ][ ] scores = new float[firstCluster.size()][secondCluster.size()];
for(int i=0; i<scores.length; i++){
if (i == remove_row)
continue;
for(int j=0; j<scores[i].length; j++){
if (j == remove_column){
continue;
}
else{
System.out.print(scores[i][j]);
if(scores[i][j] >= max)
{
max = Math.max(max, scores[i][j]);
remove_row = i;
remove_column = j;
System.out.print("Max: "+max);
}
}
}
System.out.println("##############################");
}
アイデアは以前の最大値の列と行をスキップすることですが、あなたは3反復であるならば、あなただけのすべての以前の反復の前の1の列と行をスキップしません。これを解決する良い方法がありますか? usedRows
とusedColumns
- - の追跡を続ける2セットのを維持し、代わりに細胞にゼロを置くこと
:私はちょうど適切な答えを構築するために、コメントを合計し、必要な2D配列
すべての値が正である場合は、単に設定:あなたは、各iteratonの初めに最大をリセットすることを忘れないでください消され、if文だけ
if(scores[i][j] >= max)
前に余分を使用して、それらを出荷してきました、行と列「削除された」行または列の値はゼロになるため、次の反復には影響しません。 – TDG
私は@TDGに同意します - 元の2次元配列をループし、各繰り返しの後に新しいものを構築しないでください。セルにゼロを入れるのではなく、2つのSetの 'usedRows'と' usedColumns'を維持しておきます。これは、横断した行と列を追跡し、 'if(score {i ] [j]> = max) ' – Stefan
簡単に理解できるイメージ、btwの問題を説明するのにうれしい! – Stefan