Quadratische Matrix

Status
Nicht offen für weitere Antworten.

h4nnes

Mitglied
Hallo,

ich möchte gerne eine quadratsiche matrix erstellen, die so ausschaut:



11 12 13 14 15 16 17
21 22 23 24 25 26 27
31 32 33 34 35 36 37
41 42 43 44 45 46 47
51 52 53 54 55 56 57
61 62 63 64 65 66 67
71 72 73 74 75 76 77


mein anfang war so:

Code:
import java.io.*;


class MatrixTest
{
      public static void out(int[][]matrix)
      {
        for (int i = 0; i < matrix.length; i++)
        {
          for (int j=0;j<matrix[i].length;j++)
          System.out.print(matrix[i][j] + " ");
          System.out.print("\n");
        }

      }


      public static void main (String[] args) throws IOException
      {
       int nZs;
       /*if (args.length !=1)
          {
           System.err.println("nZs !=1");
           System.exit(1);

          }
       if (nZs < 2)
          {
           System.err.println("nZs !=1");
           System.exit(1);
          } */
          
       BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
       System.out.println("Bitte nZs eingeben");
       nZs = Integer.valueOf(ein.readLine()).intValue();

       int matrix[][]=new int [nZs][nZs];
       
       int dim = nZs-1;
       int i,j;
       int v;
       v=10;
       i=0;

       for (j =0; j<=dim ;j++)
        {
           v= v+1;
           matrix[i][j] = v ;
        }

       v=20;
       i=1;
       for (j =0; j<=dim ;j++)
        {
           v= v+1;
           matrix[i][j] = v;
        }
        
       v=30;
       i=2;
       for (j =0; j<=dim ;j++)
        {
           v= v+1;
           matrix[i][j] = v;
        }
       

       v=40;
       i=3;
       for (j =0; j<=dim ;j++)
        {
           v= v+1;
           matrix[i][j] = v;
        }
       
       v=50;
       i=4;
       for (j =0; j<=dim ;j++)
        {
           v= v+1;
           matrix[i][j] = v;
        }
       
       v=60;
       i=5;
       for (j =0; j<=dim ;j++)
        {
           v= v+1;
           matrix[i][j] = v;
        }
       
       v=70;
       i=6;
       for (j =0; j<=dim ;j++)
        {
           v= v+1;
           matrix[i][j] = v;
        }



       
       out(matrix);



      }

}



wie kann ich das gänze mit der dim machen? also dass sich i ständig erhöht?
meine idee war es, eine verschachtelte for schleife, aber dann bekomm ich es nicht hin, dass sich v ständig um 10 erhöht. ich hoffe mir kann jemand helfen, vorallem hoff ich auf die hilfe von SlaterB, der mir das letzte mal sehr weitergeholfen hat.
also meine idee war folgende:

Code:
import java.io.*;

class MatrixTest1
{
      public static void out(int[][]matrix)
      {
        for (int i = 0; i < matrix.length; i++)
        {
          for (int j=0;j<matrix[i].length;j++)
          System.out.print(matrix[i][j] + " ");
          System.out.print("\n");
        }

      }

      public static void main (String[] args) throws IOException
      {
       int nZs;

       BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
       System.out.println("Bitte nZs eingeben");
       nZs = Integer.valueOf(ein.readLine()).intValue();

       int matrix[][]=new int [nZs][nZs];
       
       int dim = nZs-1;
       int i,j;
       int v;
       v=10;

       for (i = 0; i<=dim ; i++)
       {

           for (j =0; j<=dim; j++)
           {
               v= v+1;
               matrix[i][j] = v ;
           }

       }

       out(matrix);

      }

}
 
das ging aber schnell, super danke!

hmm und wie könnte ich dann z.B. so ne schlange umsetzen:

dass sowas rauskommt?

1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
 
int spalten = 4;
int zeilen = weite;

int start = 1;
int ende = 1 + spalten;

boolean rückwärts = false;

... so, jetzt musst du nur noch die Schleife zusammenbauen. ;-)
 
ich kann dir bei der rückwärts operation nicht so ganz folgen 🙁
also ich weiß nicht, wie ich es machen kann, dass wenn die schleife am ende angekommen ist, rückwärts zurückläuft.
meine äußere schleife müsste ja stimmen, so springt er immer um eine zeile nach unten, aber wie muss ich das mit der inneren schleife machen?

habs jetzt mal so versucht:

Code:
 int matrix[][]=new int [nZs][nZs];
       
       dim = nZs-1;
       v=0;
       

       for (i =0; i<=dim ; i++)
       {
           for (j =dim; j>=0 ;j++)
        {
           v= v+1;
           matrix[i][j] = v;
        }
       }
aber das passt leider noch nicht so ganz 🙁
 
In Zeile 0 schreibst du nacheinander in die Spalten
0 1 2 3 4
In Zeile 1 schreibst du nacheinander in die Spalten
4 3 2 1 0
In Zeile 2 schreibst du nacheinander in die Spalten
0 1 2 3 4
....

D.h. in einer GERADEN Zeile füllst du die Spalten von links nach rechts, und
in einer UNGERADEN Zeile füllst du die Spalten von rechts nach links...

Code:
import java.io.*;


class MatrixTest
{
    public static void main (String[] args)
    {
        int nZs = 5;

        int matrix[][]=new int [nZs][nZs];

        fill(matrix);
        out(matrix);
    }

    private static void fill(int matrix[][])
    {
        for (int r=0; r<matrix.length; r++)
        {
            for (int c=0; c<matrix.length; c++)
            {
                int col = c;
                if (r % 2 == 1) // Wenn die aktuelle Zeile UNgerade ist
                {
                    col = matrix.length - 1 - c; // gehe von rechts nach links
                }
                matrix[r][col] = r*matrix.length + c;
            }
        }
    }

     public static void out(int[][]matrix)
      {
        for (int i = 0; i < matrix.length; i++)
        {
          for (int j=0;j<matrix[i].length;j++)
          System.out.print(matrix[i][j] + " ");
          System.out.print("\n");
        }

      }

}

Ginge evlt. auch effizienter, aber das ist wohl egal.
 
Es gibt viele Möglichkeiten, aber für Anfänger ist eine "natürliche" Herangehensweise wohl nachvollziehbarer.

;-)

Code:
	public static void main(String[] args) {
		int dim = 5;
		int [][] m = new int[dim][dim];
		int endwert = 1;
		int wert = 1;
		int schritt = 1;
		boolean rückwärts = false;
		int spalte;
		
		for (int zeile = 0; zeile < 5; zeile++) {
			if (rückwärts) { 
				schritt = -1;      // rückwärtszählen
				spalte = dim-1;    // am Ende der Spalte beginnen
			} else { 
				schritt = 1;       // vorwärts
				spalte = 0;        // am Anfang der Spalte beginnen
			}
			
			endwert += dim;       // Endwert in Matrixbreite-Schritten hochzählen

			while(wert < endwert) { // aktueller Wert kleiner als der Endwert
				m[zeile][spalte] = wert++;
				spalte += schritt;
			}

			rückwärts = !rückwärts;  // Richtung ändern
		}
		

		// Ausgabe:
		for(int z = 0; z < 5; z++){
			for(int j = 0; j < 5; j++){
				System.out.print("m["+z+"]["+j+"]="+m[z][j]+" "  );
			}
			System.out.println();
		}
	}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben