# Array Füllen



## xyZman (18. Jan 2012)

Hi.
Ich stehe grad aufm Schlauch. Ich möchte meinem zweidimensionalem Array (Spielfeld) eine Startposition vorgeben.
Das Brett initialisiere ich hier.
Es wird eine 8x8 Matrix erstellt die zu Anfang Leer ist.
Ich möchte Allerdings in Zeile 0 und 1 überall ein '+' haben.
Normalerweise würde ich mein Array so befühlen

```
static final char A = '+'; // Figur Spieler FIGUR_A
	static final char B = 'o'; // Figur Spieler Figur_B
	static final char N = '.'; // Feld leer

	public static void main(String[] args) {
		char[][] spielfeld = { { A, A, A, A, A, A, A, A },
				{ A, A, A, A, A, A, A, A }, { N, N, N, N, N, N, N, N },
				{ N, N, N, N, N, N, N, N }, { N, N, N, N, N, N, N, N },
				{ B, B, B, B, B, B, B, B }, { B, B, B, B, B, B, B, B } };
```

Aber da ich hier nicht imperativ arbeite fällt mir das komplizierter da er immer meckert " cannot convert from char to ..Figur " oder so ähnlich
Wie implementiere ich hier z.b das oben beschriebene Array ? 

```
class BTSpielbrett{
	final static int n= 8;
	final static BTFigur START = null;
	
	BTFigur[][] brett;
	
	
	BTSpielbrett(){
		this.brett=new BTFigur[n][n];
		for ( int i=0;i<n;i++)
			for ( int j=0;j<n;j++)
				this.brett[i][j]=null;
		
	}



class BTFigur{
final static char KREUZ='x';
final static char KREIS='o';
final static char LEER='.';

boolean aOderB;
int zeile,spalte;
boolean istLeer;
 BTFigur(boolean aOderB, int zeile,int spalte,boolean istLeer){
	 this.aOderB =aOderB;
	 this.zeile= zeile;
	 this.spalte=spalte;
	 this.istLeer=istLeer;
 }
 boolean istAFigur(){
	 return this.aOderB;
 }
 
 boolean istBFigur() {
		return !this.istAFigur();
 }
 int getZeile() {
		return this.zeile;
	}

	int getSpalte() {
		return this.spalte;
	}
	
  public char getAFigur() {
		return KREUZ;
	}

  public char getBFigur() {
		return KREIS;
}
  public char getLeer(){
	   return LEER;
   }
}
```


lg
Flo


----------



## knoppers (18. Jan 2012)

stelle mal die ganze Klasse, bzw. den Code ein!!! Dann kann man vielleicht auch einmal die Zusammenhänge verstehen.


----------



## njans (18. Jan 2012)

```
char[][] spielfeld = { { A, A, A, A, A, A, A, A },
                { A, A, A, A, A, A, A, A }, { N, N, N, N, N, N, N, N },
                { N, N, N, N, N, N, N, N }, { N, N, N, N, N, N, N, N },
                { B, B, B, B, B, B, B, B }, { B, B, B, B, B, B, B, B } };
```
Da fehlen überall die ' '-Zeichen. So sind das keine Chars.


----------



## HimBromBeere (18. Jan 2012)

> ```
> char[][] spielfeld = { { A, A, A, A, A, A, A, A },
> { A, A, A, A, A, A, A, A }, { N, N, N, N, N, N, N, N },
> { N, N, N, N, N, N, N, N }, { N, N, N, N, N, N, N, N },
> ...


das Array besteht aus einzelnen Characters, also musst du auch Characters reintun, also char[][] spielfeld = {{'A', 'A', ...}}
sprich alle Buchstaben in einfachen Anführungszeichen...

EDIT: Verdammt, zu spät


----------



## faetzminator (18. Jan 2012)

xyZman hat gesagt.:


> Das Brett initialisiere ich hier.
> Es wird eine 8x8 Matrix erstellt die zu Anfang Leer ist.
> Ich möchte Allerdings in Zeile 0 und 1 überall ein '+' haben.
> Normalerweise würde ich mein Array so befühlen
> [...]



Und natürlich musst du dann einfach die Abbruchbedingung einer der beiden Schleifen von [c]i < n[/c] zu [c]i <= 2[/c] ändern 

Edit: Natürlich sind es chars! Es sind die Variablen, die oben deklariert wurden


----------



## xyZman (18. Jan 2012)

Ich will ja das Array nicht direkt mit Chars befühlen wie lauter A's oder N's.
Das A soll auf ein '+' verweisen.
wenn ich char[][] Spielfeld = {{ A,A,A...}} dann funktioniert es ja.
Aber wie befülle ich nun  BTFigur[][] brett;
Wenn ich  

```
final static char A='+';

	BTFigur[][] brett={ {A, A, A, A, A, A, A, A },
		{ A, A, A, A, A, A, A, A }, { N, N, N, N, N, N, N, N },
		{ N, N, N, N, N, N, N, N }, { N, N, N, N, N, N, N, N },
		{ B, B, B, B, B, B, B, B }, { B, B, B, B, B, B, B, B } };
```
 
Meldet er : Multiple markers at this line
	- Type mismatch: cannot convert from char to 
	 BTSpielbrett.BTFigur


----------



## faetzminator (18. Jan 2012)

Wenn du dort eine BTFigur haben willst, musst du diese dort auch erstellen:

```
[...] new BTFigur(false, 3, 2, true) [...]
```


----------



## njans (18. Jan 2012)

```
BTFigur[][] varName = {{new BTFigur(), new BTFigur(), new BTFigur()}}
```
So in etwa ^^
Wobei eine Schleife da wohl besser wäre


----------



## jgh (18. Jan 2012)

na ja, du definierst doch deine Klasse 
	
	
	
	





```
BTFigur
```
, die musst du da rein tun....im schlimmsten Fall mit jeweils einem [c]new BTFigur()[/c]


----------



## HimBromBeere (18. Jan 2012)

ich glaub, so müsste´s gehen:


```
BTFigur[][] varName = new MTFigur[][] {
    {new BTFigur(), new BTFigur(), new BTFigur()}
    {...}
};
```


----------



## xyZman (18. Jan 2012)

autsch..
dann eher so, das erspart etwas Arbeit oder 

```
BTFigur A = new BTFigur(false,1,2,'+');
	
	BTFigur[][] brett={ {A, A, A, A, A, A, A, A },
		{ A, A, A, A, A, A, A, A }, { N, N, N, N, N, N, N, N },
		{ N, N, N, N, N, N, N, N }, { N, N, N, N, N, N, N, N },
		{ B, B, B, B, B, B, B, B }, { B, B, B, B, B, B, B, B } };
```


----------



## xyZman (18. Jan 2012)

Also, es klappt noch nicht.
Hier mal meine ganze Klasse. In den ersten beiden Zeilen der nxn möchte ich '+'  haben.


```
class Breakthrough {
	public static void main(String[]args){
		BTSpielbrett brett = new BTSpielbrett();
		Breakthrough spiel = new Breakthrough(brett);
		spiel.spielen();
	}
	
	BTSpielbrett brett ;
	Breakthrough(BTSpielbrett brett){
		this.brett = brett;
	}
	void spielen(){
	this.brett.gebeBrettaus();
	}

	
}
class BTSpielbrett{
	final static int n= 8;
	final static BTFigur START = null;
	
	BTFigur[][] brett;
	
	BTSpielbrett(){
		this.brett=new BTFigur[n][n];
		for ( int i=0;i<n;i++)
			for ( int j=0;j<n;j++)
				this.brett[i][j]=null;
		
	}

	
	void gebeBrettaus(){
		IO.print(" ");
		for (int j = 0; j < n; j++) {
			IO.print(j);
			IO.print(" ");
			
			
		}
		
		
		IO.println();
		
		for (int i = 0; i < n; i++) {
			IO.print(i);
			
	
			
			for (int j = 0; j < n; j++) {
				if (this.brett[i][j] == START){
					
					
					
					IO.print(BTFigur.LEER);
					
					IO.print(" ");
					}
					
					
					
				else if (this.brett[i][j].istAFigur())
					IO.print(BTFigur.KREUZ);
				else
					IO.print(BTFigur.KREIS);
				
			}
			IO.println();
		
		}
	}

class BTFigur{
final static char KREUZ='x';
final static char KREIS='o';
final static char LEER='.';

boolean aOderB;
int zeile,spalte;
boolean istLeer;
 BTFigur(boolean aOderB, int zeile,int spalte,boolean istLeer){
	 this.aOderB =aOderB;
	 this.zeile= zeile;
	 this.spalte=spalte;
	 this.istLeer=istLeer;
 }
 boolean istAFigur(){
	 return this.aOderB;
 }
 
 boolean istBFigur() {
		return !this.istAFigur();
 }
 int getZeile() {
		return this.zeile;
	}

	int getSpalte() {
		return this.spalte;
	}
	
  public char getAFigur() {
		return KREUZ;
	}

  public char getBFigur() {
		return KREIS;
}
  public char getLeer(){
	   return LEER;
   }
}
class BTSpieler{
	boolean istSpielerA;
	
	BTSpieler(boolean istA){
		this.istSpielerA=istA;
	}
	boolean istSpielerB() {
		return !this.istSpielerA();
	}
	boolean istSpielerA(){
		return this.istSpielerA();
	}
}
}
```


----------



## hdi (18. Jan 2012)

Ohne den Thread komplett durchgelesen zu haben, aber wenn ich mir diese 2D-Array Initialisierung ansehe, kommt folgender Gedanke: Evtl schreibst du dir ne Kleine Hilfsmethode die aus einer Bilddatei einer 2D-Array bastelt? Die Spielfelder malst du dann in ne Datei, zB mit paint. Einfach 1 schwarzes Pixel für X, und nix (weiß) für O. Oder keine Ahnung worum's genau geht, du kannst auch mehrere verschiedene Farben nehmen die jeweils einen bestimmten Typ von Feld repräsentieren. Das geht evtl intuitiver von der Hand als das direkt im Code zu machen, und bläht dir den Code auch nicht mit diesem Monster-Code auf?


----------



## HimBromBeere (18. Jan 2012)

> Hier mal meine ganze Klasse. In den ersten beiden Zeilen der nxn möchte ich '+' haben.


ich hab noch nirgends gefunden, wo du das machst. Am besten wohl in der for-Schleife im Konstruktor:

```
this.brett = new BTFigur[n][n];
    for ( int i = 0; i < 2; i++)
            for ( int j = 0; j < n; j++)
                    this.brett[i][j] = '+';

    for ( int i = 2; i < n; i++)
            for ( int j = 0; j < n; j++)
                this.brett[i][j] = null;
```


----------



## xyZman (18. Jan 2012)

Hab ich mir auch schon gedacht, doch dann bekomme ich beim '+' :Type mismatch: cannot convert from char to 
 BTSpielbrett.BTFigur


----------



## HimBromBeere (19. Jan 2012)

achja, Tschuldigung, da muss dann natürlich new BTFigur("+") (oder wie auch immer der Konstruktor dafür lautet) hin, alternaitv auch die bereits von dir erwähnte Kürzung "= A"


----------



## faetzminator (19. Jan 2012)

xyZman hat gesagt.:


> Hab ich mir auch schon gedacht, doch dann bekomme ich beim '+' :Type mismatch: cannot convert from char to
> BTSpielbrett.BTFigur



Öhm, diese Frage wurde doch bereits beantwortet?



faetzminator hat gesagt.:


> Wenn du dort eine BTFigur haben willst, musst du diese dort auch erstellen:
> 
> ```
> [...] new BTFigur(false, 3, 2, true) [...]
> ```


----------

