Array Zickzack Muster

Amaninho

Grünschnabel
Hallo,
meine Aufgabe lautet:

Schreiben Sie ein Java-Programm, das ein rechteckiges Array mit einem Zickzack-Muster füllt
und dann am Bildschirm ausgibt. Beispiel für Programmaufruf:

Anzahl Zeilen: 5
Anzahl Spalten: 20

7 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 7 0 0 0
0 7 0 0 0 0 0 7 0 7 0 0 0 0 0 7 0 7 0 0
0 0 7 0 0 0 7 0 0 0 7 0 0 0 7 0 0 0 7 0
0 0 0 7 0 7 0 0 0 0 0 7 0 7 0 0 0 0 0 7
0 0 0 0 7 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0

Habe zwar schon angefangen, komme aber leider nicht weiter. Bitte um Hilfe!
Das ist bis jetzt meine Idee:
Habe ein wenig mit RautenIn probiert aber komme mit der If-bedingung nicht weiter...

Code:
static int[][] a;
    
    public static void main(String[] args){
    
            Out.print("Anzahl Zeilen: ");
            int zeilen = In.readInt();
            Out.print("Anzahl Spalten: ");
            int spalten = In.readInt();
    
      a = new int [zeilen][spalten]; 
      RautenIn(zeilen, spalten);
      RautenOut(a);
    }
    
    static int[][] RautenIn(int zeilen, int spalten){
    
        int [][] b = new int [zeilen][spalten];
         
         for(int i=0; i<zeilen; i++){
             
             for(int j=0; j<spalten; j++){
                                 
                 if(i==j)
                 {
                     b[i][j] = 7;
                 }else{
                     b[i][j] = 0;
                 }
             
                 }
 
         }
         
         return b;
    
    }
 
Hi

zuerst Mal: Wo ist RautenOut?
Warum eigentlich Rauten?

Und du rufst RautenIn falsch auf.
Statt
Java:
a = new int [zeilen][spalten]; 
RautenIn(zeilen, spalten);
so:
Java:
a = RautenIn(zeilen, spalten);
Das Array wird ja in RautenIn schon erstellt und zurückgegeben.
Da musst du im main nicht noch eins erstellen.

Zu dem if in RautenIn:
Überlegung:
Wenn man die Spalten der Reihe nach von [0] weg durchgeht
und die zu füllende Zeile wissen will, ist es zB. bei deinem Beispiel mit 5 Zeilen immer
0-1-2-3-4-3-2-1-0-1-2-3-4-3-2-1-0-1-2-3-4-3-2-1...
Das: 0-1-2-3-4-3-2-1 wiederholt sich immer dabei, das sind 8 Stück
Wenn 6 Zeilen wären, wäre es 0-1-2-3-4-5-4-3-2-1, sind 10.
Also immer
(Zeilenanzahl*2) - 2

Java:
int i, j;
for(j = 0; j < spalten; j++) {
	i = j % (2 * zeilen - 2);
	if(i >= zeilen)
		i = 2 * zeilen - 2 - i;
	b[i][j] = 7;
}

Gruß
 
Java:
class Pattern {

  static int[][] fill(int lines, int columns) {
    int i = 0;
    int b[][] =  new int[lines--][columns];
      for (int j = 0; j < columns; j++) {
        b[j / columns % 2 == 0 ? i++ : i--] [j] = 7;
      }  
    return b;
  }
  
  static void output(int a[][], int lines, int columns) {
    for (int[] m:a) {
      for (int n:m) {
        Out.print(n); Out.print(" ");
      }
      Out.println();
    }
  }
  
  public static void main(String[] args) {
    int lines,columns;
    Out.print("Bitte die Anzahl der Zeilen eingeben: ");
    lines = In.readInt();
    Out.print("Bitte die Anzahl der Spalten eingeben: ");
    columns = In.readInt();
    int[][] a;
    a = new int[lines][columns];
    a = fill (lines,columns);
    output (a,lines,columns);
    
  }

}
Wo liegt denn hier mein Fehler?
 
Zuletzt bearbeitet:
So, hallo wieder :)

Wie wir den Code so "geordnet" online stellen, siehst du ja jetzt
(Klick mal bei deinem Beitrag auf "Bearbeiten")

Schau mir den Code jetzt an...

edit:
Also...

1) brauchst du im main kein "new int[][]".
Das passiert doch schon in der Methode.

2)Zu fill...wenn du das wirklich 1:1 übernommen hättest, würde es funktionieren.
Deine Berechnungsmethode ist zwar verständlich, geht so aber nicht.
Kommt immer zuweit raus.
Gruß
 
Vielen Dank :)
Ich habe mein Programm nochmals verändert und nun funktioniert es:

Java:
class Pattern {

  static int[][] fill(int lines, int columns) {
    int[][] b =  new int[lines][columns];
    int i, j;
    for(j = 0; j < columns; j++) {
      i = j % (2 * lines - 2);
      if(i >= lines)
        i = 2 * lines - 2 - i;
        b[i][j] = 7;
    }
    return b;
  }
  
  static void output(int a[][], int lines, int columns) {
    for (int[] m:a) {
      for (int n:m) {
        Out.print(n); Out.print(" ");
      }
      Out.println();
    }
  }
  
  public static void main(String[] args) {
    int lines,columns;
    Out.print("Bitte die Anzahl der Zeilen eingeben: ");
    lines = In.readInt();
    Out.print("Bitte die Anzahl der Spalten eingeben: ");
    columns = In.readInt();
    Out.println();
    int[][] a;
    a = new int[lines][columns];
    a = fill (lines,columns);
    output (a,lines,columns);
    Out.println();
    
  }

}
:) Danke
 
Zuletzt bearbeitet von einem Moderator:
Ja, ein einfaches if :D
Hast recht, mit einer Zeile geht meine Idee nicht.

Aber statt lang rumüberlegen, kann man ja vor dem "b[i][j]=7;"
einfach ein
Java:
if(i < 0) i = 0;
machen
 

Neue Beiträge

Zurück