java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Antwort     Ist dieses Thema erledigt?
Themen-Optionen Thema durchsuchen Ansicht
Alt 20.06.2012, 19:39   #1 (permalink)
Neuer Benutzer
Bit
 
Registriert seit: 20.06.2012
Fachbeiträge: 4
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Standard String[] als value in HashMap

Hallo, ich hab da ein Problem. Ich versuche in einer for-Schleife Schritt für Schritt die values von den keys zu aktualisieren, leider werden auch die vorherige values überschrieben, so, dass am Ende alle values gleich sind. Hier ist die Code:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
for (int i=0; i<3; i++) {
        DatenGelesen[0] = buff.readLine();
        DatenGelesen[1] = buff.readLine();
        Ergebnisse.put(Spieler[i], DatenGelesen);
        if (DatenGelesen[0] == null) break;
        if (DatenGelesen[1] == null) break;
        String ww[] = Ergebnisse.get("Spieler 1");
        System.out.println(Arrays.toString(ww));
        ww = Ergebnisse.get("Spieler 2");
        System.out.println(Arrays.toString(ww));
        ww = Ergebnisse.get("Spieler 3");
        System.out.println(Arrays.toString(ww));
    }

Raus kommt:
Erste Runde:

[Michael, 99]
[keine Daten, 9999]
[keine Daten, 9999]

Zweite Runde:

[Viktoria, 102]
[Viktoria, 102]
[keine Daten, 9999]

Dritte Runde:

[Marcel, 150]
[Marcel, 150]
[Marcel, 150]

Was mache ich falsch und was muss man ändern?

Auch wenn ich so was schreibe:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
DatenGelesen[0] = buff.readLine();
DatenGelesen[1] = buff.readLine();
Ergebnisse.put(Spieler[i], DatenGelesen);
DatenGelesen[0] = buff.readLine();
DatenGelesen[1] = buff.readLine();

befinden sich im HashMap die dritte und vierte Zeilen aus meiner Datei
Ceromanc ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 20.06.2012, 20:03   #2 (permalink)
jgh
Stammbenutzer
Megabyte
 
Benutzerbild von jgh
 
Registriert seit: 07.07.2010
Fachbeiträge: 1.360
Abgegebene Danke: 48
Erhielt 325 Danke für 318 Beiträge
mmmh kannst du mal alle datentypen zu den Variablen zeigen...btw. CodeConvention googeln!!!!

ansonsten befindest du dich in einer for-Schleife und benutzt nicht einmal den Zählindex der Forschleife...schon sehr merkwürdig.
jgh ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
Ceromanc (21.06.2012)
Alt 20.06.2012, 20:14   #3 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 20.06.2012
Fachbeiträge: 4
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Also hier habe ich versucht, alles was dazugehört reinzustecken:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
...
Map<String, String[]> Ergebnisse = new HashMap<String,String[]>();
String [] DatenGelesen = new String[2];
String [] Default = {"keine Daten","9999"};
String [] Spieler = {"Spieler 1","Spieler 2","Spieler 3"};
...
public void DateiLesen(){
        
    FileReader myFile = null;
    BufferedReader buff = null;
 
        for (int i=0; i<3; i++) {
            Ergebnisse.put(Spieler[i], Default);
        }
        try {
            myFile=new FileReader("scores.txt");
            buff = new BufferedReader(myFile);
            try {   
                for (int i=0; i<3; i++) {
                    DatenGelesen[0] = buff.readLine();
                    DatenGelesen[1] = buff.readLine();
                    Ergebnisse.put(Spieler[i], DatenGelesen);
                    if (DatenGelesen[0] == null) break;
                    if (DatenGelesen[1] == null) break;
                    String ww[] = Ergebnisse.get("Spieler 1");
                    System.out.println(Arrays.toString(ww));
                    ww = Ergebnisse.get("Spieler 2");
                    System.out.println(Arrays.toString(ww));
                    ww = Ergebnisse.get("Spieler 3");
                    System.out.println(Arrays.toString(ww));
                }
                    
            } catch (IOException e2) {
                e2.printStackTrace();
            }
                
            try {
                myFile.close();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
                
            }catch (FileNotFoundException e2){
                JOptionPane.showMessageDialog(Hauptfenster,"Es ist ein Problem beim Lesen der Datei aufgetretten!\n" +
                        "Entweder existiert sie nicht oder der Zugriff ist verweigert\n"+"Moeglicherweise stehen fruehere Daten nicht mehr zur Ferfuegung",
                        "Fehler", JOptionPane.PLAIN_MESSAGE);
        }
            
}
Ceromanc ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 20.06.2012, 21:01   #4 (permalink)
Stammbenutzer
Megabyte
 
Benutzerbild von njans
 
Registriert seit: 01.06.2011
Fachbeiträge: 1.111
Abgegebene Danke: 5
Erhielt 218 Danke für 217 Beiträge
Ohne weiter zu gucken:
Java Code: Quelltext in neuem Fenster öffnen
1
String [] Default = {"keine Daten","9999"};
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
for (int i=0; i<3; i++) {
            Ergebnisse.put(Spieler[i], Default);
        }

Ganz schlechte Idee.
Sobald du etwas an dem String[] veränderst, veränderst du es an ALLEN! Das ist ein Objekt und du packt bei jedem Spiel dieses eine Objekt als Value in die Map.

Mach lieber:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
for (int i=0; i<3; i++) {
            Ergebnisse.put(Spieler[i], new String[]{"keine Daten","9999"});
        }

Jedoch würde ich mir das dann noch mal überdenken, warum ist da denn überhaupt eine Zahl drin, wenn du eigentlich keine Daten hast, sollt das dann nicht lieber gleich null sein?
Außerdem solltest du, wie schon vorher erwähnt, einmal die Java Conventions einhalten. Variablen schreibt man klein mit camelCase (dasIstMeineVariable). Ebenso ist die Verwendung von Java Schlagwörtern (default) eher schlecht.
__________________
Vorwiegend hier um Anfängern Hilfestellung zu geben.
DANKE Button nutzen, wenn Beiträge geholfen haben.
JAVA-TAGs nutzen, damit Java Code auch richtig dargestellt wird.
Sourcecode bei BitBucket: njans

Geändert von njans (20.06.2012 um 21:04 Uhr)
njans ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
Ceromanc (21.06.2012)
Alt 20.06.2012, 21:47   #5 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 20.06.2012
Fachbeiträge: 4
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Danke für das Antwort. Mit dem default bin ich einverstanden, das war nur zur Probe. Ich werde das alles morgen noch Mal ausprobieren, sonnst bricht mein Kopf bald , jetzt kommen bei mir überall null'en.

Das Programm ist meine Abschlussklausur in der Hochschule, das ist ein Schiebepuzzle, und ich hatte vorher keine Colloections drin, aber der Professor meinte, dass ich sie unbedingt benutzen muss, weil wir das hatten. Die einzige Möglichkeit wo ich sie benutzen kann, ist die Bearbeitung von Ergebnissen des Spiels. Meine Idee ist, dass ich drei keys mache und in jedem key wird Name und Anzahl von Gängen gespeichert. Zu dem Fall, dass die Datei statt drei nur zwei oder ein Ergebnis hat, habe ich mein HashMap vorher mit "keine Daten","9999" ausgefüllt, so habe ich immer drei Ergebnisse.
Ceromanc ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 20.06.2012, 22:43   #6 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.744
Abgegebene Danke: 0
Erhielt 1.640 Danke für 1.485 Beiträge
Sowas wie
Ergebnisse.put(Spieler[i], DatenGelesen.clone);
würde wohl auch den gewünschten Effekt bringen, aber vermutlich ist der "Fehler", dass "DatenGelesen" ... so... existiert wie es das offenbar tut. Der Array wird ja NUR dort lokal gebraucht, dann kann man ihne auch da deklarieren (!) und neu erstellen (!)
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
Ceromanc (21.06.2012)
Alt 21.06.2012, 20:03   #7 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 20.06.2012
Fachbeiträge: 4
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Vielen Dank für die Antworten!!! Ich habe es so gemacht, wie njans geschrieben hat. Jetzt ist es so wie es sein soll . Ich habe auch verstanden was ich falsch gemacht habe: ich habe nicht das Inhalt von DatenGelesen geschrieben, sondern den Array selbst und das ist dann logisch, wenn ich Array ändere, dann wird es überall geändert .

Danke noch Mal für die Antworten.
Ceromanc ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort     Ist dieses Thema erledigt?

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Objekt erzeugen aus einem XML Datei XML_Problem Java Basics - Anfänger-Themen 15 13.03.2012 20:25
MP3 Handler-Problem Cottonwood Spiele- und Multimedia-Programmierung 13 27.05.2011 14:39
Hashtable mit String[] als value fette_wachtel Java Basics - Anfänger-Themen 2 06.09.2007 12:21
Problem mit iReport: Keine Ausgabe Wiesel Java Basics - Anfänger-Themen 9 05.10.2006 13:36
Attribute werden mit den Startwerten überschrieben. Warum? madPostman Java Basics - Anfänger-Themen 12 27.11.2005 22:04


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de