2016-09-07 3 views
10

Ich möchte eine Matrix der Größe N durch N erstellen, wobei N ein konstanter Wert global definiert ist, für jetzt möchte ich nur eine Matrix mit N = 6 erstellen. kurz, wo mir fallen ist, ich will es diagonal machen, etwa so:Erstellen von N durch N diagonale Matrix mit Grundlogik

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 

Zur Zeit habe ich diese Methode:

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(); 
    } 
} 

leider nur in der Lage, es ist 0 1 2 3 4 5 in jeder Zeile drucken Ich nehme an, ich brauche eine andere verschachtelte For-Schleife, aber ich bin mir nicht sicher, wie ich sie einrichten soll.

+5

Sie haben bereits zwei Schleifen, vielleicht werden Sie es klarer sehen, wenn Sie 'J' als 'column' umbenennen. Der Wert, den Sie in jede Zelle eingeben, ist der absolute (positive) Unterschied zwischen Zeile und Spalte. – SJuan76

+1

@ SJuan76 ist richtig.OP sollte Programmfluss überprüfen, besonders im Falle von Schleifen manuell den Fehler in seiner Logik zu finden – Gaur93

+0

Nach dem Lesen @ SJuan76 Kommentar habe ich die print-Anweisung in "print (Math.abs (line-column) +") und das liefert nun die richtige Ausgabe, dasblinkenlicht ist auch in seiner Lösung richtig, obwohl die vorher erwähnte Lösung kürzer und besser lesbar erscheint. – UndyingJellyfish

Antwort

10

j ist die Spaltennummer, daher wird es für alle Zeilen gleich sein. Sie müssen j von der Zeilennummer abhängig von der Zeilennummer addieren oder subtrahieren, um eine "Verschiebung" vorzunehmen. Da das Ergebnis negativ werden könnte, müssen Sie N und mod von N hinzuzufügen:

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

Demo.

Sie es auch ohne if umschreiben kann einen bedingten Ausdruck verwenden:

int sign = j > line ? -1 : 1; 
System.out.print((N+sign*(line-j))%N + " "); 

Demo.

+0

Oder einfach der absolute Wert (; nicht sicher, ob das der Begriff für 'Math.abs' ist) von Zeile - Spalte;) um die Bedingung an die Math-Funktion zu übergeben. – AxelH

6

Eine kleine Änderung im Code funktioniert

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

Ich möchte etwas tun:

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(); 
    } 

vorausgesetzt, Sie abs() verwenden können. Ich hoffte, dass dies Ihrem Zweck dient.

0

Dies funktioniert auch:

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(); 
    } 
} 
Verwandte Themen