Array mit gleichen Werten

lara23

Grünschnabel
Hallo,

ich habe das Problem, dass bei meinem Array in jedem Feld die gleichen Werte stecken. Habe schon danach gesucht, aber mehr als eine Vermutung, dass es an einem "static" liegt, habe ich nicht dazu gefunden.

Hier die Klasse, von der ein Array erzeugt werden soll:
Code:
public class Field
{
	boolean blocked=false;     //nicht begehbare felder
	boolean barred=false;       //versperrte felder
	int xLow;
	int xHigh;
	int yLow;
	int yHigh;
}

Und hier die Methode (aus der Klasse Playground), mit der ich die Werte in das Array speichern will:
Code:
public static Field[][] generateGrid()
	{
		int klength=20;
		Random rnd=new Random();
		Field[][] pgPrivate=new Field[13][11];
		Field aktField=new Field();
		for(int i=0;i<=12;i++)
			for(int j=0;j<=10;j++)
			{
				aktField.xLow=i*klength;
				aktField.xHigh=(i+1)*klength;
				aktField.yLow=i*klength;
				aktField.yHigh=(i+1)*klength;
				
				if((i%2==1)&&(j%2==1))
				{
					aktField.blocked=true;
				}
				else
				{
					//Entscheidet, ob ein Feld verbarrikadiert wird
					int block = Math.abs(rnd.nextInt() % 10);
					if (block > 3)
						if(((i!=0)&&(j!=0))&&(i!=0)&&(j!=1)&&(i!=1)&&(j!=0))
							aktField.barred=true;
				}
				pgPrivate[i][j]=aktField;
			}
		return pgPrivate;
	}

Und das ist nun das Array, in dem alle Werte in jedem Feld gleich sind:
Code:
Field[][] p=Playground.generateGrid();

Ich dachte schon, dass es vielleicht an dem aktField liegt, aber mit
Code:
public static Field[][] generateGrid()
	{
		int klength=20;
		Random rnd=new Random();
		Field[][] pgPrivate=new Field[13][11];
		for(int i=0;i<=12;i++)
			for(int j=0;j<=10;j++)
			{
				pgPrivate[i][j].xLow=i*klength;
				pgPrivate[i][j].xHigh=(i+1)*klength;
				pgPrivate[i][j].yLow=i*klength;
				pgPrivate[i][j].yHigh=(i+1)*klength;
				
				if((i%2==1)&&(j%2==1))
				{
					pgPrivate[i][j].blocked=true;
				}
				else
				{
					//Entscheidet, ob ein Feld verbarrikadiert wird
					int block = Math.abs(rnd.nextInt() % 10);
					//In 60% der Fälle wird Feld verbarrikadiert
					if (block > 3)
						if(((i!=0)&&(j!=0))&&(i!=0)&&(j!=1)&&(i!=1)&&(j!=0))
							pgPrivate[i][j].barred=true;
				}
			}
		return pgPrivate;
	}
bekomme ich eine NullPointerException.

Schonmal vielen Dank für eure Hilfe.
MfG
 
Java:
pgPrivate[i][j] = new Field();

fehlt dir. Daher steht in dem Array an Position i/j nichts drin, und du bekommst eine NullPointerException beim Zugriff.

Problem an der oberen Lösung ist wiederum, dass du dir nur ein aktField VOR den Schleifen angelegt hast. Damit hast du nur ein Objekt welches du immer wieder veränderst und an die unterschiedlichen Stellen im Array schreibst. Du hast nicht nur die gleichen Werte, sondern die selben.
 
Hey,

vielen Dank für deine Antwort.
Ich dachte eigentlich, dass ich das schon probiert hatte - aber da war wohl irgendwas falsch.
Jetzt geht es auf jeden Fall, vielen Dank!!
 
Zurück