2016-09-07 9 views
10

NをNで定義した行列を作成したいと考えています。ここでNはグローバルに定義された定数です。基本ロジックを使用してN行N対角行列を作成する

public static void drawMatrix(){ 
    for (int line = 0; line < N; line++){ 
     for (int j = 0; j < N; j++){ 
      System.out.print(j + " "); 
     } 
     System.out.println(); 
    } 
} 

は、残念ながら、それはすべての行に0 1 2 3 4 5を印刷することができるだけです:

0 1 2 3 4 5 
1 0 1 2 3 4 
2 1 0 1 2 3 
3 2 1 0 1 2 
4 3 2 1 0 1 
5 4 3 2 1 0 

は現在、私はこの方法を持っている:どこで私は短い落ちることは、私は、斜めにそれを作るので、同じようにしたいですだから、別のネストされたfor-loopが必要だと思うが、どうやってセットアップするのかは分からない。

+5

、多分あなたはそれを明確に表示されます。各セルに入力する値は、行と列の絶対的な差です。 – SJuan76

+1

@ SJuan76が正しいです.OPはループの場合には特にループの場合にはプログラムの流れをチェックしてロジックの誤りを見つけます – Gaur93

+0

@ SJuan76のコメントを読んだあと、print文を "print(Math.abs(line-column)+" " )これは現在、正しい出力を生成します.Dasblinkenlightもソリューションに含まれていますが、前述のソリューションは簡潔で読みやすいようです。 – UndyingJellyfish

答えて

10

jは列番号なので、すべての行で同じになります。あなたがする必要があるのは、 "シフト"を行うために、行番号に応じて行番号からjを加算または減算することです。結果が負になる可能性があるので、あなたはNによってNMODを追加する必要があります。

int sign = j > line ? -1 : 1; 
System.out.print((N+sign*(line-j))%N + " "); 
:あなたはまた、条件式を使用して ifせずに、それを書き換えることができます

if (j > line) { 
    System.out.print((N-line+j)%N + " "); 
} else { 
    System.out.print((line-j+N)%N + " "); 
} 

Demo.

Demo.

+0

または、絶対値( 'Math.abs'の用語であるかどうかは不明です) line - column;)を使用して、条件をMath関数に渡します。 – AxelH

6

あなたのコードにはほとんど変化が私のようなものだろう

public static void drawMatrix() { 
    for(int line = 0; line < N; line++) { 
     for(int j = 0; j < N; j++) { 
     System.out.print(Math.abs(line - j) + " "); 
     } 
     System.out.println(); 
    } 
} 
1

に動作します:あなたはABSを使用することができます仮定

int n=6; 

    for(int row=0;row<n;row++) 
    { 
     for(int col = 0;col<n;col++) 
     { 
     System.out.print(abs(col-row) +" "); 
     } 
     System.out.println(); 
    } 

を()。 私はあなたの目的を助けることを望んだ。

0

また、これは動作します:あなたはCOLUMN` ``としてj`の名前を変更する場合は、既に二つのループを持って

public static void main(String[] args) { 
    int N = 6; 
    int column = 0; 

    for (int row = 0; row < N; row++) { 
     for (column = row; column >= 0; column--) //prints till row number reaches 0 
      System.out.print(column + " "); 
     for (column = 1; column < N - row; column++)//from 1 to N-row 
      System.out.print(column + " "); 

     System.out.println(); 
    } 
} 
関連する問題