# Array erstellen



## Stefan K (2. Feb 2012)

ich fang wirklich gerad von 0 an zu programmieren und hier ist meine Frage, also alles so leicht wie möglich erklären = ), also: 

wie erstell ich ein 2 dimensionales Array? 

mein ansatz ist bisher: 

String myArray [8][8] = { 
                  {1, 2, 3, 4, 5, 6, 7, 8},
                  {9, 10, 11, 12, 13, 14, 15, 16},
                  {17, 18, 19, 20, 21, 22, 23, 24},
                  {25, 26, 27, 28, 29, 30, 31, 32},
                  {33, 34, 35, 36, 37, 38, 39, 40},
                  {41, 42, 43, 44, 45, 46, 47, 48},
                  {49, 50, 51, 52, 53, 54, 55, 56},
                  {57, 58, 59, 60, 61, 62, 63, 64},
                                };
        String myArray[0][0] = 1;
        String myArray[0][1] = 2;
        String myArray[0][2] = 3;
        String myArray[0][3] = 4;
        String myArray[0][4] = 5;
        String myArray[0][5] = 6;
        String myArray[0][6] = 7;
        String myArray[0][7] = 8;


und so weiter bis 64 und dann mit einer 
void function( int feld[ ] )
weiter arbeiten.
Netbean sagt jetzt aber bei der ersten "int myArray[8][8] = { 
das ein fehler ist da: ']' expected
und insgesamt der block dadrunter, "not a statement"

Kann mir jemand damit helfen? 
Schonmal danke = )


----------



## Gast2 (2. Feb 2012)

Der Typ ist nicht 
	
	
	
	





```
String[8][8]
```
 sondern 
	
	
	
	





```
String[][]
```
. Außerdem sind zahlen keine Strings.

```
int[][] arr = {{1,2},{3,4}};
```
Das wäre nen gültiges Array.


----------



## HimBromBeere (2. Feb 2012)

> und insgesamt der block dadrunter, "not a statement"


Da musst du üerall das String wegnehmen...

Aber warum erstellst du erst ein Array mit haufenweise Zahlen, um es dann sofort wieder mit anderen Werten zu füllen?


----------



## Stefan K (2. Feb 2012)

Oha das ging schnell mit der Antwort  

Die Zeile ist ist aber schon richtig oder: int myArray = [8][8] = { 
Ich dachte damit gibt man wie viele Felder das Array haben soll? 
bei der Zeile steht illegal start of expression? was muss noch davor?

"Aber warum erstellst du erst ein Array mit haufenweise Zahlen, um es dann sofort wieder mit anderen Werten zu füllen?"

Hm gute Frage, ich dachte ich muss die einzelnen felder ( 1, 2, ..uws) noch genauer definieren mit [0][1].. 


int[][] arr = {{1,2},{3,4}};
Ist das jetzt ein 2x2 Array? 
und wieso sind die klammern nachm int leer?

ah und was ist das: ']' expected?
das kommt die ganze zeit.. :/


----------



## HimBromBeere (2. Feb 2012)

also wenn schon, denn schon 
	
	
	
	





```
int arr[][] = new int[8][8];
```



> Hm gute Frage, ich dachte ich muss die einzelnen felder ( 1, 2, ..uws) noch genauer definieren mit [0][1]..


Nö, entweder, du gibst am Anfang die Größe an (wie hier in meinem Beitrag) oder du gibst eine Menge von Elementen mit (wie du das ganz am Anfang gemacht hast). Im ersten Fall müsstest du das Array dann mit arr_[j] befüllen, im zweiten Fall ist es bereits gefüllt._


----------



## Stefan K (2. Feb 2012)

int myArray[][] = new int[8][8];

        myArray[0][0] = 1;
        myArray[0][1] = 2;
        myArray[0][2] = 3;
        myArray[0][3] = 4;
        myArray[0][4] = 5;
        myArray[0][5] = 6;
        myArray[0][6] = 7;
        myArray[0][7] = 8;

        myArray[1][0] = 9;
        myArray[1][1] = 10;
        myArray[1][2] = 11;
        myArray[1][3] = 12;
        myArray[1][4] = 13;
        myArray[1][5] = 14;
        myArray[1][6] = 15;
        myArray[1][7] = 16;
usw.. bis 64
also ist es so richtig ja? 
wenn ich dann wie beim schach schreibe, dass z.b. figur.myArray = 1,
erkennt mein prog dann schon das die figur auf [0][0] steht?


----------



## HimBromBeere (2. Feb 2012)

> figur.myArray = 1,


sowas gibt´s gar nicht, du musst schon immer dazuschreiben, auf welches der 64Elemente du zugreifen möchtest.

Das Befüllen geht aber auch einfacher:

```
int k = 0;
int arr[][] = new int[8][8];
for (int i = 0; i < arr.length; i++) {
	for (int j = 0; j < arr[0].length; j++) {
		arr[i][j] = k++;
	}
}
```


----------



## Michael... (2. Feb 2012)

Stefan K hat gesagt.:


> int myArray[][] = new int[8][8];
> 
> myArray[0][0] = 1;
> myArray[0][1] = 2;
> ...


Wenn dann würde die Befüllung mit zwei for-Schleifen machen, oder eben direkt

```
int myArray[][] = { {1, 2, 3, 4, 5, 6, 7, 8},
                             {9, 10, 11, 12, 13, 14, 15, 16},
                             ...
                             {56, 57, 58, 59, 61, 62, 63, 64}};
```

Wenn das dann allerdings ein Schachfeld repräsentieren soll, dann benötigt man diese Initialisierung nicht bzw. würde die Werte gezielt setzen.


----------



## Stefan K (2. Feb 2012)

Hm das mit dem befüllen ist jetzt zu spät  hab schon alles einzelnd ausgefüllt, nächstes mal benutzt ich eine while schleife 

Piece class:
    char color = 'w'; 
    char color1 = 's'; 
    int myArray; 
    String type; 

        Piece Bauer = new Piece(); 
        Bauer.myArray = 9;
        Piece Bauer1 = new Piece(); 
        Bauer.myArray = 10;  
        Piece Bauer2 = new Piece(); 
        Bauer.myArray = 11;

So hab ich mir das eigentlich gedacht, funktioniert das so? 
das man jede figur einer position innerhalb des arrays zuteilt?
und wenn nicht wie dann?


----------



## Michael... (2. Feb 2012)

Stefan K hat gesagt.:


> Hm das mit dem befüllen ist jetzt zu spät  hab schon alles einzelnd ausgefüllt, nächstes mal benutzt ich eine while schleife


und trotzdem nutzt Dir die Befüllung nichts ;-) scheint so als hast Du das Thema Array noch nicht so ganz verstanden. Ein Array ist nichts anderes als ein Behälter für Primitive oder Objekte. Was nutzt Dir da jetzt ein Array in dem die Werte 1 bis 64 stehen?


Stefan K hat gesagt.:


> Piece Bauer = new Piece();
> Bauer.myArray = 9;
> Piece Bauer1 = new Piece();
> Bauer.myArray = 10;
> ...


Nein.
Ausserdem ist es beim Schach üblich, dass der Spieler bzw. der Schachcomputer weiss, welche Figur auf welchem Spielfeld steht, die Spielfigur selbst ist da ziemlich doof ;-)

```
Piece[][] gameField = new Piece[8][8];
gameField[0][0] = new Turm();
...
gameField[1][0] = new Bauer();
```


----------



## Stefan K (2. Feb 2012)

Hehe ja kann gut sein, ich starte gerad erst in die programmierung, gibt noch vieles was ich nicht begreife.. 
Piece[][] gameField = new Piece[8][8];
gameField[0][0] = new Turm();
...
gameField[1][0] = new Bauer();

da unterkringelt er : Turm()

"symbol not find"


wenn ich dann dafür überall schreib: 

gamefield[0][1] = new Springer(); usw..
dann weiß mein Programm auf welchem feld im array die figuren sich befinden?
und was bedeutet das "()" hinter turm?


----------



## HimBromBeere (2. Feb 2012)

> gamefield[0][1] = new Springer(); usw..
> dann weiß mein Programm auf welchem feld im array die figuren sich befinden?


Na im Feld [0][1] natürlich... 
Die Klammern hinter Tirm, Springer, ... bedeuten, dass der Konstruktor aufgerufen werden soll, also das eine neue Instanz der Klasse Turm erzeugt werden soll. Die Klassen Turm, Bauer, ... musst du aber natürlich auch erstmal implementieren, deshalb bekommst du den Fehler "symbol not found"


----------



## Stefan K (2. Feb 2012)

und wie funktioniert das implementieren? 

Dicken dank zwischendurch, so kommt man wirklich viel schneller ins thema rein  

Piece[][] gameField = new Piece[8][8];


//Figuren von Spieler 1
         gameField[0][0] = new Turm();
         gameField[0][1] = new Springer();
         gameField[0][2] = new Laeufer();
         gameField[0][3] = new Dame();
         gameField[0][4] = new Koenig();
         gameField[0][5] = new Laeufer2();
         gameField[0][6] = new Springer2();
         gameField[0][7] = new Turm2();
         gameField[1][0] = new Bauer1();
         gameField[1][1] = new Bauer2();
         gameField[1][2] = new Bauer3();
         gameField[1][3] = new Bauer4();
         gameField[1][4] = new Bauer5();
         gameField[1][5] = new Bauer6();
         gameField[1][6] = new Bauer7();
         gameField[1][7] = new Bauer8();

         //Figuren von Spieler 2
         gameField[7][0] = new TURM();
         gameField[7][1] = new SPRINGER();
         gameField[7][2] = new LAEUFER();
         gameField[7][3] = new DAME();
         gameField[7][4] = new KOENIG();
         gameField[7][5] = new LAEUFER2();
         gameField[7][6] = new SPRINGER2();
         gameField[7][7] = new TURM2();
         gameField[6][0] = new BAUER1();
         gameField[6][1] = new BAUER2();
         gameField[6][2] = new BAUER3();
         gameField[6][3] = new BAUER4();
         gameField[6][4] = new BAUER5();
         gameField[6][5] = new BAUER6();
         gameField[6][6] = new BAUER7();
         gameField[6][7] = new BAUER8()

so sieht das im moment bei mir aus, so gut?


----------



## Michael... (2. Feb 2012)

Von der Initialisierung des Spielfeldes her in Ordnung.
Aber schau Dir mal ein Schachspiel an. Da gibt es keinen Bauer5 oder Turm2...
Es gibt acht weiße und acht schwarze Bauer... die Bauern einer Farbe unterscheiden sich nicht, genauso wie die anderen Figuren einer Farbe.
Der Unterschied besteht nur in der Art (Zugmöglichkeiten) der Figur und deren Zugehörigkeit (Farbe)


----------



## HimBromBeere (2. Feb 2012)

Wenn du TURM ersetzt durch Turm (äquivalent natprlich Bauer und Springer)...

EDIT: Du brauchst nicht für jede Figur eine eigene Klasse zu definieren, sondern für jeden Typ von Figur (also eine Klasse für alle Springer, eine für alle Bauern...).
Schreibst du dann sowas wie new Bauer, teilst du dem Compiler mit: ich möchte die Klasse Bauer EIN WEITERES MAL instanziieren, also einen Bauern bauen...


----------



## Stefan K (2. Feb 2012)

Okay stimmt, macht Sinn hab ich jetzt geändert und wie funktioniert das implementieren? 
gibts da einen befehl oder muss ich "Bauer" z.b. mit iwas definieren?


----------



## Michael... (2. Feb 2012)

Naja, wenn Du wirklich mit dem Programmieren bei 0 anfängst, solltest Du auch bei 0 anfangen und nicht mit einem Schachspiel.
Voraussetzung hierfür sind schon mal grundlegenden Kenntnisse wie Bedingungen, Schleifen, Array/Collections, Aufbau von Klassen und ganz wichtig Vererbung...


----------



## HimBromBeere (2. Feb 2012)

Implementieren heißt soviel wie schreiben, also coden...
Wenn da stand, du sollst eine Klasse implementieren, heißt das nichts weiter als dass du sie erstellen sollst. Dafür musst du nirgends was drücken, sondern nur schreiben, z.B.


```
public class Bauer extends Spieler {
    // jede Figur gehört entweder zu schwarz (0) oder zu weiß (1)
    final int farbe;
    public Bauer(int farbe) {this.farbe = farbe;}

}
```
Dann legst du z.B. an Spielposition [5][4] einen neuen weißen Bauern an:

```
spielfeld[5][4] = new Bauer(1);
```

EDIT: Sinnvollerweise wirst du die sog. Instanzvariable farbe aber nicht (wie hier) in der Klasse Bauer definieren (denn dann müsstest du das gleiche auch in den Klassen Turm, Springer, ... machen, die ja auch von Spieler erben), sondern gleich in der Klasse Spieler.


----------



## Stefan K (2. Feb 2012)

Hm ja ich muss mich da einarbeiten, aber ich denk ich bin auf einem ganz gutem weg, ich dachte an einem beispielt gehts ganz gut und schachspiel ist motivierend


----------

