Array[][] contains Array[][] ?

Status
Nicht offen für weitere Antworten.
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.

  • * 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)
Nur wie bekomme ich das hin, dass er mir im Beispiel nicht begonnen bei (0,2) nicht als flaecheninhalt den rest der ersten zeile ausliest, sondern wie hier im beispiel das rechteck so berechnet (fett) -> bei genauem hinschauen sieht man die leichte vervorherbung (Koordinaten des neuen Rechtecks: x=2,y=0,width=11,length=5)

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^^
 
S

SlaterB

Gast
da du anscheinend aber das Problem schon gut durchdachst hast,
hier grob vollständig meine Idee (ich weiß nicht genau, ob dein Algorithmus das schon macht):

du beginnst beim Startpunt +
dann schaust du nur die waagerechte Achse an,
bis zu einer maximalen Länge, entweder Ende des Arrays oder ein x
->
++++++++++++++++++++++++++
Startpunkt a, Endpunkt b

wenn diese erste Zeile fertig ist, gehts los Richtung y-Achse,
du schaust dir die nächste Zeile an, von a bis b in dieser Zeile,
wenn alles + ist, dann ist das ok, dann gehts mit der nächsten Zeile weiter,
ansonsten hast du irgendwann

++++++++++++++++++++++++++
+++++++++++++x

zu diesem Zeitpunkt machst du zwei Dinge,
1. die bisherigen Zeilen (können ja mehrere sein) von a bis b bilden ein mögliches größtes Rechteck, das musst du dir merken,
temp hast du ja schon,
wenn tmp bereits vorhanden und größer ist, dann vergessen
2. b setzt du auf die neue kleinere Größe, die Anzahl der Zeilen verändert sich nicht,
neue Ausgangssituation ist dann
+++++++++++++
+++++++++++++

und schon gehts wie zuvor mit der nächsten Zeile weiter, mehr gibts fast nicht zu beachten,
am Ende ist tmp das größte Rechteck

noch Randbedingungen:
1. wenn alle Zeilen durchlaufen sind, das untere Ende des Array erreicht ist,
dann natürlich aufhören und auch noch das aktuelle Rechteck mit tmp vergleichen

2.
in der Situation
+++++++++++++
+++++++++++++
x

also x gleich zu Beginn einer neuen Zeile, kann man praktisch genauso verfahren wie bei Randbedingung 1

---------

falls du meinst, dass du das auch so hast,
dann poste bitte deinen Code nochmal zusammen mit einer lauffähigen main, welche das Array setzt,
muss kein riesiges sein, aber ich will es zumindest nicht selber zusammenstellen ;)
+ Beschreibung, an welche Stelle der Algorithmus versagt

falls du einen anderen Algorithmus hast, dann auch ne main und noch bisschen mehr erklären,
wie genau der abläuft, idealerweise so wie meine Beschreibung ;)
unter Kommentaren wie 'Höhe neu einstellen' kann ich mir wenig vorstellen
 
J

JavaBeginner_copy

Gast
Danke für deinen Hinweis!!!
War von der Idee genauso wie meine, nur das ich nicht auch schon in der Funktion selber die Flächen berechnet habe und temporär gespeichert, sondern dachte, dass es ohne den Weg geht, diese abzuspeichern .... und nach den Schleifen eh die grøßte rauskommt ...

Ich werde ihn gleich mal so implementieren und schaun was bei rauskommt!

Immerhin war meine Strategie ja gar nicht so schlecht ..... hatte mir da nur die Zähne ausgebissen, und kam nicht sinnvoll weiter, denn ich wollte nicht für alle x*y-Felder die Ergebnisse in einem Array Of Points oder so speichern!

Dankø
 
S

SlaterB

Gast
das ganze stellt natürlich nur die Suche nach dem größten Rechteck von einer bestimmten Start-Position aus dar,
du musst weiterhin das gesamte Array durchlaufen und von jeder möglichen Start-Position aus neu suchen und aus dieser Menge lokal größter Rechtecke am Ende noch das größte heraussuchen,

gut möglich, dass das nicht besonders schnell ist und es weit bessere Algorithmen gibt,
aber man kann ja mit einem einfachen anfangen
 
J

JavaBeginner_copy

Gast
Ja, genau das hatte ich ja vor, deshalb wollte ich nicht im Algorithmus selbst, die Speicherung und Verlgleichung vornehmen, denn das ist nun echt etwas bruteforce..... aber bis ich was neues finde, nutze ich das nun so !!!!
Die CPUs werden ja immer schneller .... und was størt mich dann noch der Speicher :) :bahnhof:

Nee, ist aber eignetlich net mein Stil, so ein Murks zu coden, aber was soll's. Wenns keine bessere Methode gibt, muss ich damit vorlieb nehmen ...


Code:
        for (int i=0;i<ZeilenLaenge;i++)
        {
            for (int j=i;j<SpaltenAnzahl;j++)
            {
              ..... GetMaximalenRestPlatz(i, j);  .......
            }
        }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
M Array Rang eines Elements Allgemeine Java-Themen 4
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
noah1407 Array Allgemeine Java-Themen 3
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
L Array und Index Allgemeine Java-Themen 26
L die 3 größten Zahlen im Array Allgemeine Java-Themen 1
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
Willi.We Array sortieren Allgemeine Java-Themen 5
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
Aboya Char Array rekursiv vergleichen Allgemeine Java-Themen 15
V4ll3.Wff Array in Java Allgemeine Java-Themen 4
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
H Array Sportschütze Allgemeine Java-Themen 6
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
M Array verändern Allgemeine Java-Themen 1
A JavaFX 2 dimensionales array Allgemeine Java-Themen 1
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
parrot Array Aufgabe Allgemeine Java-Themen 3
N String Array Eingabe Allgemeine Java-Themen 6
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
N Variablen Array Länge ändern. Allgemeine Java-Themen 8
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
A Array Problem Allgemeine Java-Themen 8
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
F Datei in String-Array einlesen Allgemeine Java-Themen 8
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
F 3 Dimensionales Array mit Allgemeine Java-Themen 9
M Steueralgorithmus verwandelt Array in Anfangszustand Allgemeine Java-Themen 9
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
D Datentypen 2-3 Baum erstellen mit geordnetem int-array Allgemeine Java-Themen 0
T Objekt in Array packen Allgemeine Java-Themen 6
M Zahlen in Array anordnen Allgemeine Java-Themen 8
M Eclipse Unvollständigen Array ansteuern Allgemeine Java-Themen 2
D Erste Schritte Im Array Werte tauschen Allgemeine Java-Themen 5
Xge For/Array Error: IndexOutOfBounds Allgemeine Java-Themen 4
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
J Variablen Array ertellen bei model.put Allgemeine Java-Themen 13
S Eindimensionales Array in zweidimensionales Array speichern Allgemeine Java-Themen 5
R convert 2d array list to 2d array Allgemeine Java-Themen 1
J json Array würfel Spalten durcheinander Allgemeine Java-Themen 9
MiMa Array umbau oder Alternative? Allgemeine Java-Themen 5
L Datentypen 3D Array Allgemeine Java-Themen 3
M 2D Array mit unterschiedlichen Längen erstellen und befüllen Allgemeine Java-Themen 11
Mario1409 Methoden JSON Array von URL Allgemeine Java-Themen 8
E Swing Array mit Bildern in GUI darstellen Allgemeine Java-Themen 2
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
H Zweidimensionales Array - Zellen der Tabelle verbinden Allgemeine Java-Themen 2
M Zweidimensionales Array mit Binärzahlen füllen Allgemeine Java-Themen 8
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
G Array ohne Aufzählungszeichen ausgeben Allgemeine Java-Themen 6
J Wie kann ich ein Java Array als Säulendiagramm ausgeben? Allgemeine Java-Themen 2
Z 2D Array Pixels reparieren Allgemeine Java-Themen 2
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
B Polibios Array erweitern Allgemeine Java-Themen 1
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
J Array-List Bubble-Sort Allgemeine Java-Themen 12
4 Variablen Int-Array Int Zuweisen Allgemeine Java-Themen 7
J Array Allgemeine Java-Themen 8
Z Array mit unterschiedlichen Werten Allgemeine Java-Themen 1
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
A Mit dem letzten bis zum ersten Wert aus Array rechnen Allgemeine Java-Themen 15
A Vector Strings in Array splitten Allgemeine Java-Themen 6
I Muster in Array suchen Allgemeine Java-Themen 10
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
B Zahlen manuell eingeben und in Array Speichern Allgemeine Java-Themen 2
R Wärmeleitung, 3d-Array Allgemeine Java-Themen 2
T Java Array in Methoden Allgemeine Java-Themen 1
D Erste Schritte Array von einer forschleife nach ausserhalb trasferieren Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben