automatische Suche in Array

  • Themenstarter Themenstarter thematt
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
T

thematt

Gast
Hallo!

Habe ein Array erstellt. Das Array ist 20 x 20.

Ich möchte nun, wenn das Array 10, 10 ausgewählt wird, das er überprüft ob in den benachbarten Arrays der Gleiche Wert enthalten ist. Sprich 10,10 = 10,9 oder 10,10 = 11,10. Falls er übereinstimmt soll er das neue Array auch wieder überprüfen mit den nächsten.....und so weiter.

Vielen Dank schonmal
 
Will ab diesen Punkt die Variable durchsuchen. Kann aber auch ein anderer Startpunkt sein!
 
ich glaub Du bringst Array mit Variable durcheinander !?
Was meinst Du mit "das neue Array"?
Was ist überhaupt genau Deine Frage? 🙂
 
Folgendes 🙂

ich habe ein Feld 20 x 20: z.B. "etwas kleiner 5x5"
x x x x x
x y x x x
x y y y x
x x y x x
x x x x x

mein array ist folgendermaßen:
1 Wert = von links nach rechts
2 Wert = von oben nach unten
Wert 2,2 = y

So nun möchte ich das er weiter sucht, nach oben, links, rechts.... wo noch weitere y sind die direkte Nachbarn sind.

Ich hoffe du verstehst mein Problem ;-)
 
und wo ist jetzt dein problem dabei?

das feld rechts von x,y ist x+1,y
das feld links von x,y ist x-1,y
usw.

das kannst du doch jetzt einfach testen
 
ja schon klar soweit!

Nur falls 2 Felder gleich sind, soll er die nächsten auch vergleichen.
Sprich ne Kette!
z.B. er fängt an bei 2,2 dann findet er noch 2,3; 3,3;4,3 und 3;4!
Problem ist, das er mit dem anderen auch weitersucht!
 
das kann man zum beispiel mit einer while schleife machen oder auch rekursiv
 
hab's mal gemacht :roll:

Code:
public class start {
	
	static boolean[][] checked;
	
	public static void main(String[] args) {
		
		int[][] field = new int[][]{{1,2,1,1,1},   //unser feld 	
									       {2,2,2,2,2},	//erster wert = zeile
									       {2,1,1,1,1},	//zweiter wert = spalte
									       {2,2,2,2,1},
									       {1,2,1,1,1}};
		
		/*
		 * ein zweites feld, in dem wir uns merken, ob wir einen
		 * Eintrag schon überprüft haben. Am Anfang alles auf false.
		 */
		checked = new boolean[field.length][field[0].length]; 
		for (int i = 0; i < field.length; i++) {				
			for (int j = 0; j < field[0].length; j++) {
				checked[i][j] = false;
			}
		}
		
		check(1,field,2,4);  //suche in field den wert 1 und fange bei (2,4) an
		
		
	}
	
	/*
	 * unsere check-methode. wenn der aktuelle punkt gleich s ist, werden die koordinaten 
	 * ausgegeben und außerdem wird die funktion dann noch mit den nachbarn
	 * aufgerufen, wenn diese noch im feld sind und noch nicht geprüft wurden.
	 */
	public static void check(int s,int[][] field, int x, int y) {
		
		checked[x][y] = true;
		if (field[x][y] == s) {
			System.out.println("("+x+","+y+")");
			if (x>1 && !checked[x-1][y]) {
				check(s,field,x-1,y);
			}
			if (x<field[y].length-1 && !checked[x+1][y]) {
				check(s,field,x+1,y);
			}
			if (y>1 && !checked[x][y-1]) {
				check(s,field,x,y-1);
			}
			if (y<field.length-1 && !checked[x][y+1]) {
				check(s,field,x,y+1);
			}
		}
	}	
}

Ausgabe:
Code:
(2,4)
(3,4)
(4,4)
(4,3)
(4,2)
(2,3)
(2,2)
(2,1)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben