2017-12-03 15 views
-2

私は行列に与えられた任意の桁で、ゼロが見つかった場合はnullでない要素を下げようとしています。 たとえばマトリックス行列の要素をjavaの下に移動する

1 2 3 4 5 
6 7 8 0 0 
0 12 0 14 0 
0 0 18 19 0 
0 22 23 24 25 

の出力が順に要素を押し動かす、上記ゼロ残り

0 0 0 0 0 
0 2 3 4 0 
0 7 8 14 0 
1 12 18 19 5 
6 22 23 24 25 

あろう。

public static void displace(int[][] matrix, int size) { 
    int cont=1; 
    for (int col = 0; col < size; col++) { 
     cont = 1; 
     for (int row = 0; row < size; row++) { 
      if (matrix[row][col] == 0) { 
       matrix[row-1][col]=matrix[row][col]; 
       cont++; 
      } 
     } 
    } 
} 

私はゼロで、行の最初の数字を置き換えることである作る唯一の事は、つまり、それがゼロをとり、位置が上がる:私はこのコードを持っています。

+0

あなたの質問は... –

+0

私が持っているコードはうまくいかず、うまくやっていないと私は間違いを知らないということです。あなたがすべてを読んだら、私は「私に行の最初の数字をゼロで置き換えることだけです。すなわち、ゼロをとり、ポジションが上がります」と言いました。 – Fernando

+2

私はこのコードをデバッグする証拠がないので、この質問をd​​ownvotedしました。あなたの質問を編集して、あなたのデバッグが明らかにしたことと、特定のコード行に関する特定の質問を表示してください。参照:[最小限で完全で検証可能な例の作成方法](http://stackoverflow.com/help/mcve)と[小規模プログラムのデバッグ方法](https://ericlippert.com/2014/03/05)/how-to-debug-small-programs /) –

答えて

1

今後の質問については、mcveのようにJoe Cがコメントしました。 関連していないものは何でも削除(STaefiなどのようなint[] colorint positionはコメント)などのように、フォームを使用して簡単にテストデータを提供します。溶液は、溶媒として

public static void main(String[] args) { 

    int[][] matrix1 = {{1,2, 3 ,4 ,5}, 
         {6,7, 8, 0, 0}, 
         {0,12, 0,14, 0}, 
         {0,0, 18,19, 0}, 
         {0,22,23,24, 25} 
    } ; 

    displace(matrix1); 
    for(int[] row : matrix1) { 

     System.out.println(Arrays.toString(row)); 
    } 
} 

:あなたは、プロセスを繰り返す必要があり、まですべてのスワップが行われます。

public static void displace(int[][] matrix) { 

    int swapCount= 1; 

    while (swapCount > 0) { 

     swapCount = 0; 
     for (int col = 0; col < matrix[0].length; col++) { 
      for (int row = 0; row < matrix.length; row++) { 
       if (matrix[row][col] == 0) { 
        if(((row-1) >= 0) && (matrix[row-1][col] != 0)) { 
         //do swap 
         matrix[row][col] = matrix[row-1][col]; 
         matrix[row-1][col]= 0; 
         swapCount++; 
        } 
       } 
      } 
     } 
    } 
} 
関連する問題