2017-10-13 7 views
1

プロジェクトでは、与えられたスコアの最大値を計算する必要があります。その後、この特定の行と関連する列は、すべての行で1つの最大値を取得するために削除する必要があります。だから私の結果は次のようになります。繰り返しごとに2次元配列の列と行を削除する

結果

enter image description here

これは私がこれまで持っているものです。

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の列と行をスキップしません。これを解決する良い方法がありますか? usedRowsusedColumns - - の追跡を続ける2セットのを維持し、代わりに細胞にゼロを置くこと

:私はちょうど適切な答えを構築するために、コメントを合計し、必要な2D配列

+0

すべての値が正である場合は、単に設定:あなたは、各iteratonの初めに最大をリセットすることを忘れないでください消され、if文だけif(scores[i][j] >= max)

前に余分を使用して、それらを出荷してきました、行と列「削除された」行または列の値はゼロになるため、次の反復には影響しません。 – TDG

+0

私は@TDGに同意します - 元の2次元配列をループし、各繰り返しの後に新しいものを構築しないでください。セルにゼロを入れるのではなく、2つのSetの 'usedRows'と' usedColumns'を維持しておきます。これは、横断した行と列を追跡し、 'if(score {i ] [j]> = max) ' – Stefan

+0

簡単に理解できるイメージ、btwの問題を説明するのにうれしい! – Stefan

答えて

0

を使用する必要はありません

max = Float.MIN_VALUE 
関連する問題