Methode verändert mein Eingabe Array oO

snape6666

Mitglied
Hi,
ich bin gerade dabei aus Spaß ein Sudoku zu programieren und hänge jetzt gerade daran dass mit die Start Methode mein Default Array (also ein folles Feld mit allen Zahlen) abändert.....

eigentlich soll sie mir ein neues Array erzeugen in dem einfach elemente gelöscht werden aus dem Default Array aber irgendwie wird mein Default mit geändert..

hier der Constructor der Klasse und die MEthode Start hoffe ihr habt eine idee..

Danke im Voraus!!

Java:
public Sudoku(int Level)
	{
		//Fuellt Default mit einem neu generierten Feld (Dient spaeter zusaetzlich als Ueberpruefung)
		Default   = Neustart();
		//Macht das Spielfeld Spiel-Fertig (entnimmt Zahlen)
		Spielfeld = Start1(Default,Level);
	}
Java:
//Entnimmt dem neu generierten Zahlenfeld Werte zum erhoehen der Schwierigkeit
	protected int[][] Start1(int[][] Neu, int Level)
	{
		//Zaehlt in abhaengigkeit des Levels 5 = -35 Elemente, 9 = -63 Elemnte 
		for(int i =0;i<7*Level;i++)
		{	
		//Zufalls-Zahlen fuer den Vergleich	
		int a =(int)Math.round(Math.random()*8);
		int b =(int)Math.round(Math.random()*8);
		
		while(Neu[a][b]==0)
		{
			a =(int)Math.round(Math.random()*8);
			b =(int)Math.round(Math.random()*8);
		}
		Neu[a][b]=0;
		}
		
		return Neu;
	}
 
Zuletzt bearbeitet:
Du solltest ganz dringend deine Namenswahl überdenken.
Code:
eineVariable
,
Code:
EineKlasse
und default ist eh ein schlüsselwort und sollte auf in großschreibung nicht verwendet werden.
Es handelt sich um das selbe Objekt, was du da veränderst. Könntest ggf mit .clone() eine Kopie erstellen.
 
so die variablen habe ich jetzt mal schnell geändert =)
ja wie kann ich das machen dass "spielfeld" und ("default" jetzt "uhrsprung") "uhrsprung" 2 object atribute werden die sich nicht gegenseitig verändern oO dachte ein Objekt kann mehre Atribute haben oder hatte ich da was falsch verstanden =(

oh.... habe gerade mal versucht in der gui ein abbild des uhrsprünglichen Defaults zu machen und dann erst Start() auszuführen aber iwi wird selbst dann das ziwschen gespeicherte verändert obwohl es kein objekt der Klasse Sudoku ist =( bin grad mit meinem latein am ende... glaub ich geh schlafen 😀

Wäre nett wenn mir einer erklärt welchen denkfehle rich noch habe..^^

gn8
 
Zuletzt bearbeitet:
Es wäre ganz hilfreich, wenn du auch sagen würdest, wie du es versucht hast. Denn mit einem Abbild funktioniert es auch.
In deinem bisherigen Code nimmst du direkt Änderungen an
Code:
neu
vor, wie du selbst bemerkt hast. Das liegt daran, dass Parameter als Referenz übergeben werden (wenn es sich um Objekte handelt). Daher musst du das Array erst kopieren, bevor du es veränderst.
Ein einfaches
Code:
clone()
wird hier nicht reichen, da es nur eine flache Kopie erzeugt. Deswegen musst du jedes einzelne Array auch kopieren. Dies würde dann so aussehen:

Java:
int[][] result = neu.clone();
for (int i = 0; i < neu.length; i++)
	result[i] = neu[i].clone();
Im Anschluss nimmst du die Änderungen an
Code:
result
vor und gibst dieses dann zurück.
 
ja ok ich versuche das mal in der gui. also ein neues Objekt erzeugen mit vollem Feld, dann abspeichern in zwischenspeicher array;

Java:
for(int i =0;i<9;i++){
  for(int j=0;j<9;j++){
      speicher[i][j]=feld[i][j];
  }
}

und führe dann Start aus. ginge das so oder muss ich das mit dem clone schreiben oO weil speicher is ja elemt von gui und net von sudoku?
 
Ich emfehle dir erstmal einige Grundlagen zb call by reference und call by copy nachzulesen. Die brachst du mindestens um Objectorientiert programieren zu können.
 

Zurück
Oben