2-Dimensionaler String: Zahlen verschieben

Lt.Sh4dow

Mitglied
Ich habe ein Problem mit einem 2-Dimensionalem String.
Was ich habe:
1. Aus einer Text-Datei in einem String[][] gespeichert:
Code:
# # # # # # # # 
#           0 # 
#           0 # 
# 1 1 2 2 2 2 # 
# 3 3       4 # 
# 5 5       4 # 
# 6 6 6     4 # 
# # #   # # # #
Ich möchte das die Zahlen darin nach unten fallen, solange Platz ist.
Ich kann den ganzen Block auch schon nach links drehen. Bei dem Fallen komme ich aber nicht weiter:
Java:
    public int dim = 0;                // Dimension der quadratischen Matrix
    public String inh[][];                // Inhalt der Matrix

// Dreht inh[][] gegen den Urzeigersinn um 90° 
        public void Links(){
            String mm[][] = new String[this.dim+1][this.dim+1];
            for (int i = 1; i <= dim-1; i++){
                for (int j = 1; j <= dim-1; j++){
                    mm[i][j] = this.inh[j][dim-i];
                }
            }
            this.inh = mm;
        }
     
        // Lässt alle Sachen innen fallen 
        public void Fallen(){
         
            String mm[][] = new String[this.dim+1][this.dim+1];
          
            for (int z = 2; z< dim; z++){     // geht alle Zeilen duch
                 for (int s = 2;s<=dim-1; s++){// alle Spalten
                   for(int k= 0;k <= 10; k++){ // k = einfach nur eine zahl
                       String s1 = Integer.toString(s);
                  String st = String.valueOf(s1.charAt(z));
if (k = st2){
                         System.out.println("k");
                 }

                 this.inh = mm;
             }
            }
        }

Funktioniert nicht :(.
Mein erstes Ziel ist es,dass ich weiss wie ich die Zahlen in ein String bekomme, da hackt es bei mir schon :/

Sorry
 
Zuletzt bearbeitet:

Robat

Top Contributor
Mein erstes Ziel ist es,dass ich weiss wie ich die Zahlen in ein String bekomme, da hackt es bei mir schon :/
Das machst du doch genau hier:
String s1 = Integer.toString(s)
Ich mach es zwar immer mit
Java:
String.valueOf()
.. tut aber nix zur Sache. Kommt das gleiche bei raus.

if (k = st2)
{

System.out.println("k");
}
Schau mal genau was du hier machst.
- Du setzt k = st2 (du vergleichst diese nicht).
- Zweitens versuchst du hier eine Zahl (k) mit einem String (st2 [den es btw gar nicht gibt?]) zu vergleichen.
- Strings vergleicht man mit equals() [ if (str1.equals(str2) {} ]
- Zahlen vergleichst du mit ==. [ if ( i == k) {} ]

Einen String mit System.out.println() ausgeben tust du wie folgt:
Java:
System.out.println("Meine schöne Zahl: " + k);
 
N

neoexpert

Gast
String[][] ist eher ein dreidimensionales Gebilde:
zweidimensionales Array ist eine Fläche. Auf dieser die Strings beliebig hoch wachsen.
Für 2 Dimensionen reicht ein char[][].
 

Lt.Sh4dow

Mitglied
Zahlen vergleichst du mit ==. [ if ( i == k) {} ]
Stimmt, habe ich vergessen :/.
ich habe vergessen st2 mit reinzukopieren
Sieht jetzt folgendermaßen aus:
Code:
for (int z = 2; z< dim; z++){     // geht alle Zeilen duch
                for (int s = 2;s<=dim-1; s++){// alle Spalten
                  for(int k= 0;k <= 10; k++){ // k = einfach nur eine zahl
                      String s1 = Integer.toString(s);
                 String st = String.valueOf(s1.charAt(z));
                 int st2 = Integer.parseInt(st);
                     if (k == st2){
                        System.out.println("k");
                }

                this.inh = mm;
            }
           }
         }
       }
Doch dann bekomme ich eine Fehlermeldung :
Code:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
    at java.lang.String.charAt(Unknown Source)

Tut mir Leid dass ich so wenig weiß.

Ich komme mir vor als ob ich nix richtig mache, egal was ich versuch.
Im Prinzip will ich ja, wenn unter der Zahl nix ist, das die Zahl nach unten "fällt". Das geht ja in dem man untersucht ob der Punkt darunter == null ist. Nun brauche ich ja aber die Position der Zahl. Und irgendwo da komm ich nicht weiter
 
Zuletzt bearbeitet:

Robat

Top Contributor
Tut mir Leid dass ich so wenig weiß.

Lass dich nicht entmutigen.. das sind typische Anfängerfehler, die jeder von uns gemacht hat! Und für Unwissenheit sollte man sich nicht Entschuldigen, vielmehr solltest du es als Schritt nach vorne sehen, dass du dein Wissen erweitern willst!

Ein grundlegender Fehler von dir ist glaub ich, dass du nie mit dem selben String Array arbeitest sondern immer ein neues deklarierst. Das heißt du hast 3 versch. String arrays aber nie das gleiche.
Was ich meine ist folgendes.. dein Programm ist ca so aufgebaut:

Java:
public String inh[][];

public static void main(String[] agrs)
{
     // HIER IST DEINE inh Variable GÜLTIG
}

public void links()
{
    // HIER ISt NUR DEINE mm Variable GÜLTIG - NICHT DIE inh
    String mm[][];
}

public void fallen()
{
   // HIER IST EINE NEUE mm Variable GÜLTIG - NICHT DIE AUS links UND NICHT DIE inh Variable
   String[][] mm;
}

Am ende Übergibst du zwar immer den Inhalt deiner lokal variable an deine global inh var, aber da deine lokale Variablen immer leer sind, wird deine globale inh Variable auch leer. (bzw werden Sie mit 0 initialisiert, da bin ich mir gerade aber nicht sicher).

Was du also machen solltest um immer mit der selben Variable zu arbeiten, ist sie als Parameter zu übergeben bspw. so:

Java:
public void links(String[][] localMatrix)
{
     for(.. ; .. ; ..)
     {
              ....
     }
}

for (int z = 2; z< dim; z++){ // geht alle Zeilen duch
Warum fängst du bei 2 an? Du willst sicherlich in der 2. Zeile anfangen. Dazu musst du z = 1 setzen.. warum? Weil man immer bei 0 Anfängt zu zählen.. die 1. Zeile hat den Index 0, die 2. Zeile den Index 1, 3 hat Index 2, etc..

for (int s = 2;s<=dim-1; s++){// alle Spalten
Das selbe gilt für hier. Bei 1 Anfangen.

for(int k= 0;k <= 10; k++){ // k = einfach nur eine zahl
Was das bewirken soll weiß ich noch nicht so ganz.

Was du also machen solltest ist folgendes:

Java:
private int DIM = 8; // LÄNGE DES ARRAYS LT. INITIAL POST
for(int i = 1; i < DIM; i++)
{
    for(int j = 1; j < DIM; j++)
    {
          // Jetzt schaust du ob in deinem Eintrag eine Zahl steht:
          if(localMatrix[i][j].matches("[0-9]+"))
         {
              // jetzt schaust du, ob es eine Zeile drunter gibt
              if(i < DIM - 1)
             {
                   // jetzt schaust du was eine Zeile weiter drunter steht
                   if(localMatrix[i+1][j].equals(""))
                   {
                         // Wenn es frei ist, dann tausch die beiden Werte
                   }
              }
         }
    }
}

So versuch das erstmal umzusetzen.. hoffe meine Denkweise ist richtig und verständlich. Ist wie immer ungetestet.

Gruß
Robert
 

Joose

Top Contributor

Lt.Sh4dow

Mitglied
Kleines Update:
Code:
// Dreht inh[][] gegen den Urzeigersinn um 90°   
        public void Links(){
            String mm[][] = new String[this.dim+1][this.dim+1];
            for (int i = 1; i <= dim-1; i++){
                for (int j = 1; j <= dim-1; j++){
                    mm[i][j] = this.inh[j][dim-i];
                }
            }
            this.inh = mm;
        }

public void Fallen(){
for(int i= dim -1; i > 1;i--){
                for(int j = 1;j <= dim-1; j++){
                    String i1 = Integer.toString(i);
                    String st = String.valueOf(i1.charAt(j));
                    System.out.println("St : " +st);
                    System.out.println(dim +" " +i +" " +j +" " + this.inh[i][j]);
}
            }
            }
Ich habe jetzt herausgefunden, dass inh[][] nicht leer ist, d.h. dass man auch einen Wert ausgelesen bekommt(an der richtigen Stelle).
dim ist auch gegeben(weiß ich nur nich ganz wie, hat mir jemand geholfen, beim einlesen).
Jetzt kommt jedoch der Error, bei String st:
Code:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
    at java.lang.String.charAt(Unknown Source)
 

JStein52

Top Contributor
Ja ist ja klar. Nimm einfach mal den Fall dim = 5. Dann durchläuft i die Werte 4 ... 2 (sind alle einstellig !)
Dann machst du ein toString(i), d.h. eine einstellige Zahl. Dann versuchst du aber in der Schleife über j unweigerlich auf das 2. te Element charAt(j) zuzugreifen. Das geht dann aber in die Hose weil der String nicht so viele Elemente hat.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B 2 Dimensionaler Bubblesort Allgemeine Java-Themen 2
G Z Wert - 3 Dimensionaler Punkt Allgemeine Java-Themen 13
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
M String Allgemeine Java-Themen 10
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
O String in Long Hexerdezimal umwandel Allgemeine Java-Themen 14
N String vergleichen. Allgemeine Java-Themen 27
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
SaschaMeyer Arbeitet String.split falsch? Allgemeine Java-Themen 4
M Switches ohne String Allgemeine Java-Themen 18
AmsananKING String Iteration Allgemeine Java-Themen 5
S Shuffle String aus if-clause Allgemeine Java-Themen 11
Besset Variablen Ist String = "" + int inordnung? Allgemeine Java-Themen 6
M Map <Long, String> zu Map<String, Long> Allgemeine Java-Themen 9
S String Encoding Verständnisproblem Allgemeine Java-Themen 22
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
SaftigMelo Bug Fixen von String-spliten Allgemeine Java-Themen 8
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
YohnsonM String - Aufteilung und Nutzung einzelner Chars Allgemeine Java-Themen 7
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
S String umbenennen: wie? Allgemeine Java-Themen 4
x46 String Format Fehler Allgemeine Java-Themen 2
S ISO 8601 -> getter / setter String Allgemeine Java-Themen 3
L String zu repräsentativen Wert Allgemeine Java-Themen 0
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
L regex ganzer string? Allgemeine Java-Themen 2
L Ist ein string ein erlaubter variabel name? Allgemeine Java-Themen 2
Z JNA Cpp-DLL String Verwendung Allgemeine Java-Themen 2
A String auf Zahlen überprüfen Allgemeine Java-Themen 5
N String Array Eingabe Allgemeine Java-Themen 6
MiMa Datum von String zu LocalDateTime Allgemeine Java-Themen 8
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
R char aus String entfernen Allgemeine Java-Themen 10
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
S Ini Text aus String parsen Allgemeine Java-Themen 1
T String-Manipulation beim Ablauf in Eclipse und als JAR-File Allgemeine Java-Themen 8
M String lässt sich nicht Zusammenfügen Allgemeine Java-Themen 10
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
R Schlüsselworte "Throw new exception" gibt nicht den String als Fehlermeldung aus Allgemeine Java-Themen 2
R Variablen String mit split-Funktion aufteilen Allgemeine Java-Themen 7
F Datei in String-Array einlesen Allgemeine Java-Themen 8
S Marker aus String ermitteln Allgemeine Java-Themen 5
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
M Bei String.format ein Komma statt einem Punkt ausgeben lassen Allgemeine Java-Themen 1
S MSSQL Exception & Connection String Allgemeine Java-Themen 19
B Bei Email: FW / AW... - Hilfe bei String suche Allgemeine Java-Themen 21
J String - Vergleiche Allgemeine Java-Themen 7
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
G CSV in String Allgemeine Java-Themen 7
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
Xge Replace x Zeichen aus String Allgemeine Java-Themen 2
coolian warum bekomme ich ein string index out of bounds exception Allgemeine Java-Themen 17
F In String 2 Buchstaben vertauschen Allgemeine Java-Themen 2
J Class Decompile als String (Procyon) Allgemeine Java-Themen 2
I Datentypen String in class sicher verwahren Allgemeine Java-Themen 17
J Falls der String ein "X" beinhaltet Allgemeine Java-Themen 2
T String mehrere Worte Allgemeine Java-Themen 2
D String Groß-/Kleinschreibung Allgemeine Java-Themen 2
D String und Klassenvariable Allgemeine Java-Themen 6
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
C String in Objektnamen umwandeln Allgemeine Java-Themen 3
E Variablen Aus .txt ausgelesener string mit if() überprüfen? Allgemeine Java-Themen 2
L String-Schema-Aufspaltung Allgemeine Java-Themen 2
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
L String splitten und multiplizeren Allgemeine Java-Themen 10
G String mit umbekannter länge splitten. Allgemeine Java-Themen 2
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
A Byte zu String Allgemeine Java-Themen 4
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
T Komplexitätsoptimierung String vergleich Allgemeine Java-Themen 4
heinz ketchup String im JLabel ausgeben und erneuern Allgemeine Java-Themen 6
S Input/Output Beste Möglichkeit einen String in einen Datei zu Schreiben Allgemeine Java-Themen 2
V Eingegeben String Splitten und in Integer umwandeln Allgemeine Java-Themen 2
L Decrypt String Allgemeine Java-Themen 1
X Variablen AtmicLong größer als String ? Allgemeine Java-Themen 4
S String literal und Referenzvariablen Allgemeine Java-Themen 6
J Datentypen Absätze mit String im Word Dokument Allgemeine Java-Themen 3
D "Paste" String doppelt Allgemeine Java-Themen 14
E String Frage Allgemeine Java-Themen 9
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
D JSON to String Allgemeine Java-Themen 31
M String automatisch in nächste Zeile umbrechen (Graphics) Allgemeine Java-Themen 6
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
T Swing Font String Pixellänge Allgemeine Java-Themen 1
G Substrings in einen String zusammenfassen Allgemeine Java-Themen 5
Tommy Nightmare String.replaceAll(...) fehlerhaft? Allgemeine Java-Themen 3
L String auf zahlenwert prüfen Allgemeine Java-Themen 13
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben