J
JavaBeginner_copy
Gast
Hallo ich hab folgendes Problem. Ich habe ein Array[][] of char, das letztlich wie folgt ausschaut!
________ x-achse
|
y-achse
x x++++++++++++++++++++++++++++++++++++++++++
x x+++++++++++xxxxxxxxxxxxx+++++++++++++++++++++
+++++++++++++++++xxxxxxxx+++++++++++++++++++++
+++++++++++++++++xxxxxxxx+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++
++++xxxxxxxx++++++++++++++++++++++++++++++++++
++++xxxxxxxx++++++++++++++++++++++++++++++++++
++++xxxxxxxxx+++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++
Also so ein Art Spielfeld .... nun møchte ich aber, dass ich mir eine Funktion berechnet, welches das grøßte Rechteck, dass nur aus "+" besteht, noch verfügbar steht und wo es sich befindet! Um den Restplatz gut auszunutzen brauch ich das ....
Folgenden Algotithmus wollte ich abarbeiten.
hier schon mal ein versuch meinerseits ...
zuerst berechne ich, die maximale länge, bis ein "x" erscheint und die maximale høhe bis ein "x" erscheint!
(Hier: max laenge bis zum ende, da erste zeile kein "x" enthält; max hoehe bis zum ende, da (2,i) bis zum ende der spalte auch kein "x" enthält ....
ich gehe also in x-richtung, bis zur berechneten max-länge
wenn während pro schritt in x-richtung, in y-richtung ein hindernis kommt, soll die maximale-høhe herabgesetzt werden ...
und wenn die høhe nicht gerade begradigt wurde, soll, wenn in x-richtung ein hindernis kommt, auch die maximale länger herabgesetzt werden ....
also schau ich so zu sagen, so lange, bis ich eine breite und eine hoehe hab, die kein "x" enthält ... nur irgendwie klappt das noch nicht 100%ig ... er bietet mir halt die erste zeile als rechteck an ...
Wenn das net geht, wollte ich es mit einem art array.contains probieren ...
sprich:
->also gibt es subarray in spielfeld beginnend an der position Pos!
Nur solche Funktionen gibt's na türlich wieder nicht bei Java^^
________ x-achse
|
y-achse
x x++++++++++++++++++++++++++++++++++++++++++
x x+++++++++++xxxxxxxxxxxxx+++++++++++++++++++++
+++++++++++++++++xxxxxxxx+++++++++++++++++++++
+++++++++++++++++xxxxxxxx+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++
++++xxxxxxxx++++++++++++++++++++++++++++++++++
++++xxxxxxxx++++++++++++++++++++++++++++++++++
++++xxxxxxxxx+++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++
Also so ein Art Spielfeld .... nun møchte ich aber, dass ich mir eine Funktion berechnet, welches das grøßte Rechteck, dass nur aus "+" besteht, noch verfügbar steht und wo es sich befindet! Um den Restplatz gut auszunutzen brauch ich das ....
Folgenden Algotithmus wollte ich abarbeiten.
- * Fange bei (0,0) an, und prüfe, wie groß man das recheck machen kønnte!
* Speicher den flächeninhalt (hohe*breite).
* Finde das naechste Rechteck beginne bei (0,1) ... (0,2) ... (10,0) .... (10,10) ....; wenn der Flächeninhalt groesser als bisher groesster, speicher die rechteck koordinaten (x,y, laenge, hoehe)
hier schon mal ein versuch meinerseits ...
zuerst berechne ich, die maximale länge, bis ein "x" erscheint und die maximale høhe bis ein "x" erscheint!
(Hier: max laenge bis zum ende, da erste zeile kein "x" enthält; max hoehe bis zum ende, da (2,i) bis zum ende der spalte auch kein "x" enthält ....
ich gehe also in x-richtung, bis zur berechneten max-länge
wenn während pro schritt in x-richtung, in y-richtung ein hindernis kommt, soll die maximale-høhe herabgesetzt werden ...
und wenn die høhe nicht gerade begradigt wurde, soll, wenn in x-richtung ein hindernis kommt, auch die maximale länger herabgesetzt werden ....
also schau ich so zu sagen, so lange, bis ich eine breite und eine hoehe hab, die kein "x" enthält ... nur irgendwie klappt das noch nicht 100%ig ... er bietet mir halt die erste zeile als rechteck an ...
Code:
char[][] spielfeld = new char[SpaltenAnzahl][ZeilenLaenge];
public Rectangle GetMaximalenRestPlatz(int start_x, int start_y) {
Rectangle tmp = new Rectangle();
int AktLaenge = 0;
int AktHoehe = 0;
int j = start_y;
int i = 0;
//Berechne maximale länge bis gegenstand kommt
for (i = start_x; i < this.ZeilenLaenge; i++) {
if ((spielfeld[j][i]) != "x") {
AktLaenge++;
}
}
System.out.println("Max Länge: " + AktLaenge);
i = start_x;
//Berechne maximale høhe bis gegenstand kommt
for (j = i; j < this.SpaltenAnzahl; j++) {
if ((spielfeld[i][j]) != "x") {
AktHoehe++;
}
}
//begradigen, da array bei 0,0 anfängt
AktHoehe--;
AktLaenge--;
int set =0;
for (i = start_x; i< AktLaenge;i++) //in x-Richtung gehen
{
for (j=start_y;j < AktHoehe; j++) //in y-Richtung gehen
{
if ((spielfeld[j][i]) == "x") {
AktHoehe=j-1; //høhe neu einstellen, da gegenstand auf der hoehe gefunden
set = 1;
}
else set=0;
}
if ((set == 0)&&(spielfeld[j][i] == "x")) {
AktLaenge=i-1; //weiteneu einstellen, da gegenstand auf der weite gefunden
}
}
System.out.println("Max Hoehe: " + AktHoehe);
System.out.println("Raum-Platz: " + AktHoehe * AktLaenge);
tmp.x = 0;
tmp.y = 0;
tmp.width = AktLaenge;
tmp.height = AktHoehe;
System.out.println("Rechteck: "+ tmp.toString());
return tmp;
}
Wenn das net geht, wollte ich es mit einem art array.contains probieren ...
sprich:
Code:
char[][] subarray = new char[2][3];
char[][] spielfeld = new char[SpaltenAnzahl][ZeilenLaenge];
Arrays.fills(subarray,"+"),
Point Pos Arrays.contains(subarray,spielfeld);
Pos.x = x-Koordinate
Pos.y = y-Koordinate
->also gibt es subarray in spielfeld beginnend an der position Pos!
Nur solche Funktionen gibt's na türlich wieder nicht bei Java^^