# Zweidimensionales Array mit Diagonalen



## Stiga (30. Nov 2012)

Hallo, ich stehe vor einem Problem
ich soll ein zweidimensionales, quadratisches Array schreiben, das so ausschauen soll
n = 6
7 0 0 0 0 7
0 7 0 0 7 0
0 0 7 7 0 0
0 0 7 7 0 0
0 7 0 0 7 0
7 0 0 0 0 7

n soll vom Benutzer abgefragt werden.
Füllen und Ausgabe des Arrays sollen in einer eigenen Methode durchgeführt werden.

Mein Ansatz war folgender :

[Java]
class Cross{

	public static void main(String[] args) {
		Out.println ("Bitte geben Sie eine Zahl ein");

		int n= In.readInt ();
		int m =n;
		int [][]k;
		k= new int [n][m];
		fuellen();
		print();


	}
	static int fuellen(int[][]k,int n){
		int a =0;
		int b =n-1;
		int c = 0;
		if(a<b){
			k[a][c] = 7;
			k*[c] =7;
			c++;
			a++;
			b--;
		}
		a++;
		b--;
		if (a>b){
			k [a][c] =7;
			k [c] =7;
			c++;
			a++;
			b--;
		}
		return k[][];
	}
	static int print(int[][]k, int n){
		Out.println("n= " + n);
		for (int l:k) Out.println(l);
	}

} [/code]

Viele Dank schonmal*


----------



## nillehammer (30. Nov 2012)

Die Duplizierung der Variablen n ist unnötig für die Initialisierung des Arrays. Das geht mit weniger Code.

```
// so geht's kürzer mit der Initialisierung des Arrays
int n= In.readInt ();
int [][]k = new int [n][n];
```

Du definierst die Methode fuellen so:

```
static int fuellen(int[][]k,int n){
```
also mit Parametern 
	
	
	
	





```
int[][] k
```
 und 
	
	
	
	





```
int n
```
. Der Parameter 
	
	
	
	





```
n
```
 ist unnötig. Du kannst 
	
	
	
	





```
n
```
 durch Abruf von 
	
	
	
	





```
k.length
```
 ermitteln. Neue Signatur wäre also:

```
static int fuellen(int[][]k){
```
Und Aufruf aus der main:

```
fuellen(k);
```


----------



## dayaftereh (30. Nov 2012)

Das zweidimensionale Array hast du ja schonmal erzeugt. Dann würde ich mir zwei Variablen machen l und m. Die variablen würde ich mit l = 0 und m = n initialisieren. Wobei n deiner Größe ist (6). Nun würde ich mit einer For-Schleife über das Array gehen und mir die eindimensionalen Spalten Arrays hollen. bei jeder iteration würde ich die gefunden eindimensionalen Spalten Arrays a[] an der Stelle l und m einen wert 1 setzen und dann l um eins erhöhen und m um eins erniedrigen.


```
int n = 6;

int[][] array = new init[n][n];

int l = 0;
int m = n;

for(int i = 0; i < array.length; i++) {
   int[] a = array[i];
   a[l] = 1;
   a[m] = 1;
   l++;
   m--;
}
```


----------



## Stiga (30. Nov 2012)

Danke schonmal Nillehammer,

aber es funktioniert noch nicht
ich bekomme einen error '.class' expected
bei dem return aus Zeile 35


----------



## Bleiglanz (30. Nov 2012)

klarer ist es doch, wenn du Haupt- und Nebendiagonale in einem Durchlauf auffüllst:

```
static void fuellen(int[][] k) {
        int n = k.length;
        for (int zeile = 0; zeile < n; zeile++) {
            k[zeile][zeile] = 7;
            k[zeile][n - zeile - 1] = 7;
        }
    }
```


----------



## Stiga (30. Nov 2012)

mein neues Programm schaut jetzt so aus


```
class Cross{

	public static void main(String[] args) {
		Out.println ("Bitte geben Sie eine Zahl ein");
		
		int n= In.readInt ();
		int m =n;
		int [][]k = new int [n][n];
		fuellen(k);
		print(n,k);
		
		
	}
    static void fuellen(int[][] k) {
        int n = k.length;
        for (int zeile = 0; zeile < n; zeile++) {
            k[zeile][zeile] = 7;
            k[zeile][n - zeile - 1] = 7;
        }
    }
	
	static int print(int[][]k, int n){
		Out.println("n= " + n);
		for (int l:k) Out.println(l);
	}
		
}
```

aber es funktioniert immernoch nicht


----------



## AmunRa (30. Nov 2012)

du kannst mit deiner foreach schleife so nicht auf alle Elemente eines ZWEI Dimensionalen Arrays zugreifen (siehe print Methode)

```
for (int []t:k){
    for (int l:t){

}

}
```

sondern so.


[EDIT]
Fehlt dir nicht auch noch ein Rückgabewert?
[/EDIT]


----------



## Stiga (30. Nov 2012)

sorry das versteh ich jetzt nicht


----------



## AmunRa (30. Nov 2012)

```
static int print(int[][]k, int n){
        Out.println("n= " + n);
        for (int l:k) Out.println(l);
    }
```

Dieser Code von dir ist komplett falsch.

1. Du schreibst static int print das int gibt an, dass du einen int Wert zurück gibst, aber du hast keinen Return WErt (z.B.) 
	
	
	
	





```
return 0;
```

2. deine For-SChleife ist falsch. Das funktioniert so nicht.

Du musst das so machen 

```
for (int []t:k){
    for (int l:t){
      Out.println(l);
   }
}
```


----------



## Stiga (30. Nov 2012)

okay, dann bekomme ich aber den Array in nur einer Spalte. Mit der Interator-Form wollte ich ja erreichen, dass der Array in zeilen und Spalten ausgegeben wird.


danke  Ich hab den Fehler gefunden, war ganz einfach. 
Wenn man zu lange an einem Programm sitzt, wird man manchmal etwas schludering.


----------

