[[Ljava.lang.String;@3487a5cc - Problem

Java-Insel

Aktives Mitglied
Hallo liebe Leute,
Ich habe eine schöne kleine Klasse geschrieben und habe jetzt, um zu testen, ob sie funktioniert, einfach mal ganz viele
Code:
System.out.println(irgendwas);
's gesetzt. Eigenartigerweise kam dann aber
Code:
[[Ljava.lang.String;@3487a5cc
raus. Warum, kann ich nicht sagen. Ich habe auch keinen Ansatz, da weder ein Fehler beim Kompilieren kam noch beim ausführen... Und das Programm benutzte nur einen String-Array und Tokens (es handelte sich halt nicht um irgendwelche "zufälligen" Zeichen und Pfade zu Paketen oder sonst was...). Deshalb konnte ich auch nicht alles aufschreiben. Vielleicht könnt ihr ja aus dieser Meldung irgendwas folgern.

Hinweis: mit Eclipse habe ich diese Meldung bekommen, mit dem Terminal war die Zahl hinter dem "@" beim ersten mal ausführen:
Code:
f7e6a96
, dann wars wie beim Eclipse.
 
Das ist auch kein Fehler.
Du versuchst ein String Array auszugeben per System.out.println, leider bringen Arrays keine schöne toString() mit. Probier mal folgendes:
Java:
System.out.println(Arrays.toString(irgendwas));
(Falls irgendwas ein String[] Array ist).
 
So wie ich das weiß, ist das die Speicheradresse des Objekts (in dem Fall ein Stringarray [man verzeihe mir falls das mit der Zahl falsch war]). Ein solcher Ausdruck kommt immerdann wenn es für das Objekt keine implementierung von
Code:
toString()
gibt.
Was du im Falle von Arrays tun kannst ist
Code:
Arrays.toString(irgendwas);
zu nehmen und das in dein
Code:
System.out.println()
machen.

Das kein Fehler angezeigt wird ist klar, da man jedes Objekt per print anzeigen kann. Nur wird halt bei einigen ein solches Konstrukt gebildet was du da hast.

Edit zu meinem vorposter:
Es muss kein Stringarray sein um den weg zu gehn. Ein int[] geht genauso oder ein Array mit irgendeiner anderen Klasse die toString() überschreibt

Außerdem ist ein String[] Array doch ein 2 dimensionales Array oder?^^ Ist irgendwie doppeltgemoppelt aber das macht ja nichts. Fands nur amüsant
 
Hmm. Ich hab's mal ausprobiert: In meinem String-Array (der übrigens zweidimensional ist) suche ich mir in den Methoden der Klasse Objekte raus u.s.w.. Die Methoden sollen die im Array enthaltenen Objekte wiedergeben. Also habe ich am Ende dieser Methoden
Code:
MeinArray[x][y].toString();
eingegeben. Bringt allerdings irgendwie nichts: Alles ist so wie vorher.:noe:
 
Also habe ich am Ende dieser Methoden
Code:
MeinArray[x][y].toString();
eingegeben. Bringt allerdings irgendwie nichts: Alles ist so wie vorher.:noe:

Du solltest ja auch Arrays.toString( MeinArray) verwenden. Aber bei einem zweidimensionalen bringt auch das nicht den gewünschten Effekt (aber probiere es ruhig mal aus).
Für ein zweidimensionales Array wirst Du die Ausgabe selbst schreiben müssen - ist ja aber kein Hexenwerk:
Java:
for ( String[] strs : MeinArray) {
    System.out.println( Arrays.toString( strs));
}
Natürlich könnte man auf das Arrays.toString auch verzichten und stattdessen mit zwei verschachtelten Schleifen arbeiten.
 
Dann sollte
Java:
System.out.println( MeinArray[x][y]);
eigentlich funktionieren. Falls nicht: was liefert
Java:
System.out.println( MeinArray[x][y].getClass().getName() + ": " + MeinArray[x][y]);
 
@Murray: Es liefert
Code:
java.lang.String
.
Vielleicht ist die Fehlerquelle ja auch eine andere, und zwar der StringTokenizer?
 
@Murray: Es liefert
Code:
java.lang.String
.
Vielleicht ist die Fehlerquelle ja auch eine andere, und zwar der StringTokenizer?

Ich verstehe dein Problem nicht.
Wenn es ein String ist, dann sollte es kein Problem geben... Was für ein StringTokenizer? Wie wärs, wenn du uns mal ein bisschen Code zeigst.

Übrigens, falls es ein mehrdimensionales Array ist, kann man auch die Methode
Code:
Arrays.deepToString( myMultiDimArr )
verwenden.
 
@Murray: Es liefert
Code:
java.lang.String
.
Vielleicht ist die Fehlerquelle ja auch eine andere, und zwar der StringTokenizer?

Wenn die Ausgabe "java.lang.String: [[Ljava.lang.String;@3487a5cc" ist (wobei die Adresse natürlich variieren kann), dann hast Du ein Problem bei der Zuweisung, denn dann steht wirklich diese String-Repräsentation des Arrays in der einzelnen Zelle.
 
Also wirklich...

Wenn du keinerlei Ambitionen hast, Informationen herauszurücken, dann verdienst du auch keine Lösung deines Problems.

Wir sind Programmierer, keine Magier. Da hast du dich anscheinend im Forum geirrt.

Guck dir mal dein Thema an: "[[Ljava.lang.String;@3487a5cc - Problem"
Das ist die Ausgabe der toString()-Methode aus der Object Klasse für ein zweidimensionales String-Array. WAS soll das einem sagen? Die Lösung lautet: Statt
Code:
System.out.println(myArr);
eher
Code:
System.out.println(Arrays.deepToString(myArr));
...

[EDIT]Nach einigem Lesen fällt mir auf... Du versuchst also einzelne Objekte auszugeben? Du gibst aber in diesem Fall ein GANZES String-Array aus. Du musst deinen Code überprüfen, ob du irgendwo System.out.println(myArray); hast statt System.out.println(myArray[x][y]);[/EDIT]
 
Zuletzt bearbeitet:
Da die Ausgabe mit getClass().getName() ja bereits gezeigt hat, dass das ausgegebene Objekt ein einfacher String (und kein Array) war, würde ich doch eher darauf tippen, dass der Fehler bei der Zuweisung steckt. Interessant wäre also die Stelle mit MeinArray[x][y]=...
 
O.K., ich schreibe mal die implementierung auf:
Java:
public class HAtabelle {
String[][] m_HA;
        //"Tabelle" anlegen
        public HAtabelle(int Stunden) {
                m_HA = new String[7][Stunden];
        }
        //Einen String hinzufügen
        public void addHomework(int Tag, int Stunde, String HA) {
                m_HA[Tag][Stunde] = m_HA + "\n" + HA;
        }
        //Den String ersetzen
        public void setHomework(int Tag, int Stunde, String HA) {
                m_HA[Tag][Stunde] = HA;
        }
        //String löschen
        public void delHomework(int Tag, int Stunde) {
                m_HA[Tag][Stunde] = null;
        }
        //Genauen Part entfernen
        public boolean delHomework(int Tag, int Stunde, int Token) {
                //String "zerstückeln"
                StringTokenizer tokenizer = new StringTokenizer(m_HA[Tag][Stunde],"\n");
                try {
                        //vorspulen
                        for(int i=1; i<Token - 1; i++) {
                                tokenizer.nextToken();
                        }
                        //genau diesen String suchen...
                        StringBuilder rmHA = new StringBuilder(m_HA[Tag][Stunde]);
                        String suche = tokenizer.nextToken();
                        int i = rmHA.indexOf(suche);
                        //...und entfernen.
                        rmHA.delete(i, i + suche.length());
                }
                catch (NoSuchElementException e) {
                        return false;
                }
                return true;
        }
        //Ganzen String ausgeben
        public String getHomework(int Tag, int Stunde) {
                try {
                        return m_HA[Tag][Stunde].toString();
                }
                catch(Exception e) {
                        System.err.println(e);
                        return null;
                }
        }
        //Genauen Teil abfragen        
        public String getHomework(int Tag, int Stunde, int Token) {
                //String "zerstückeln"
                StringTokenizer tokenizer = new StringTokenizer(m_HA[Tag][Stunde],"\n");
                try {
                        //vorspulen
                        for(int i = 1; i < Token - 1; i++) {
                                tokenizer.nextToken();
                        }
                        //... und gewünschten String ausgeben.
                        return tokenizer.nextToken().toString();
                }
                catch(Exception e) {
                        System.err.println(e);
                        return null;
                }
        }
}
Und ja, es geht um Hausaufgaben.
 
Zuletzt bearbeitet:
Das Problem liegt hier:
Java:
        //Einen String hinzufügen
        public void addHomework(int Tag, int Stunde, String HA) {
                m_HA[Tag][Stunde] = m_HA + "\n" + HA;
        }
Hier wird in eine Zelle des Arrays eine Verkettung aus der String-Repräsentation des ganzen Arrays mit einem Newline-Zeichen und dem übergebenen String geschrieben.
Gewünscht ist aber wohl, dass ein Newline und der übergebene String an den bestehenden Inhalt der Zelle angehängt werden.
Also etwa:
Java:
m_HA[Tag][Stunde] = (m_HA[Tag][Stunde] == null) ? HA : ( m_HA[Tag][Stunde]  + "\n" + HA);
 

Zurück
Oben