• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Was bedeutet das: [I@7d4991ad?

H

Hallo1234

Aktives Mitglied
Hallo,
habe hier eine komische Ausgabe bei einem Array.
Wenn ich den Array in eine for-Schleife packe, werden mir in der Console anstatt "[I@7d4991ad" nur Nullen ausgegeben. Immerhin ein kleiner Fortschritt, aber nicht das, was ich brauche.
Weiß jemand woran das liegt?
Java:
import java.util.Scanner;
public class Lotto {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        
        int tipp = 0;
        System.out.println("Geben Sie bitte Ihre Tipps ein: ");
            
        for(int i = 1; i<=6; i++) {
        System.out.println("Tipp "+i + ": ");
        tipp = s.nextInt();
        
        if(tipp<=0 || tipp>49) {
            System.out.println("Bitte noch einmal eingeben. Der Tipp war ungültig: ");
            i = i-1;
            
        }
    }
        
        int[] tipps = new int[tipp];
        for(int i = 0; i<tipps.length; i++) {
            System.out.println(tipps[i]);
        }
        
    }
}

Vielen Dank
 
mihe7

mihe7

Top Contributor
Ein Array ist ein Objekt. Die toString()-Methode überschreibt Array nicht, so dass Object#toString zum Tragen kommt und dem entsprechend der Typname, gefolgt von @ und der hexadezimalen Darstellung des Hashcodes ausgegeben wird.

Probier mal z. B. System.out.println(java.util.Arrays.toString(tipps));
 
H

Hallo1234

Aktives Mitglied
Danke für deine Erklärung 👍 .
Bei mir wird dann [0, 0, 0, 0, 0] ausgegeben. Müssten es nicht eigentlich 6 Nullen sein? Und sollten es überhaupt Nullen sein?
 
mihe7

mihe7

Top Contributor
In Zeile 21 erzeugst Du ein Array tipps, dessen Größe durch tipp - also die letzte Benutzereingabe in der for-Schleife - bestimmt wird. Die Elemente eines int-Arrays werden automatisch mit 0 initialisiert.
 
J

Joreyk

Aktives Mitglied
benenn mal deine variablen um und übeerleg mal was in deinem int array überhaupt drin steht im zeitpunkt als du es durhcgehst
 
temi

temi

Top Contributor
Java:
        for(int i = 1; i<=6; i++) {
        System.out.println("Tipp "+i + ": ");
        tipp = s.nextInt();

In der dritten Zeile wird jedesmal der aktuell vom Benutzer eingegebene Tipp der Variablen "tipp" zugewiesen und überschreibt deren alten Wert.

Wenn du das nicht willst, dann musst du dein Array schon vorher erstellen und die Eingaben einem Index des Arrays zuweisen.
 
J

Joreyk

Aktives Mitglied
Java:
import java.util.Scanner;
public class Lotto {

    public static void main(String[] args) {
        Scanner cmdScanner = new Scanner(System.in);
        int[] eingetrageneZahlen = new int[5];
    
        System.out.println("Geben Sie bitte Ihre Tipps ein: ");
        
        for(int i = 0; i< 5; i++) {
        System.out.println("Tipp "+i + ": ");
        int scannerWert = cmdScanner.nextInt();
            if(scannerWert > 0 && scannerWert < 49) eingetrageneZahlen[i]= scannerWert;
            else {
                System.out.println ("Bitte noch einmal eingeben. Der Tipp war ungültig: "); 
                i-=1;
                // mit break müsste es auch gehen da die inkrementation erst im nachhinein stattfindet;
            }
        }
        for(int i = 0; i<eingetrageneZahlen.length; i++) {
            System.out.println(eingetrageneZahlen[i]);
        }
    }
}

Kann sein dass irgendwo ein syntax fehler ist weil ich es hier gecoded hab...

ich möchte nicht dass du es einfach so kopierst sondern überlegst was da passiert...und wo du unterschiede hast und warum die unterschiede sehr viel ausmachen

und du musst mit den tabs aufpassen wo du sie setzt damit die schleifen lesbar bleiben... da gibts ein paar regeln ich mach manchal hinter der schließenden klammer ein kommentar zu welcher schleife es gehört wenn es nicht mehr ersichtlich ist das sind so ziemlich die einzigen kommentare die ich einfüge :D


außerdem ist es sehr wichtig keine einbuchstabigen werte als variable zu benennen ... s sagt null aus wenn du den code nach 1er woche liest
 
H

Hallo1234

Aktives Mitglied
Hallo, vielen Dank für eure Hilfe. Ich habe eine Lösung gefunden. Nun hat sich allerdings ein neues Problem aufgetan:
Java:
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        
        System.out.println("Geben Sie bitte Ihre Tipps ein: ");
        
        int[] tipps = new int[6];
        
        for(int j = 0; j<tipps.length; j++) {
            
            System.out.print("Tipp "+(j+1)+" :");
            tipps[j] = s.nextInt();
        
            
        if(tipps[j]<=0 || tipps[j]>49) {
            System.out.println("Bitte noch einmal eingeben. Der Tipp war ungültig: ");
            j = j-1;
        }
        if(tipps[0] == tipps[j]) {
        System.out.println("Doppelt");
        }
    }

Ich finde keine einfache Lösung dafür, wie man einen Doppelgänger aus 6 Tipps ausfindig machen kann. Das heißt wenn der 2. Tipp 19 war, und der 5. Tipp wieder 19 ist, sollte "Doppelt" ausgegeben werden. Hier seht ihr meinen Versuch, wenigstens in die richtige Richtung zu kommen.
Ich bin sehr dankbar für jede Hilfe.
Grüsse
 
kneitzel

kneitzel

Top Contributor
Da wäre mein Tipp:
Zerlege die Aufgabe in Teilaufgaben. Dann hast Du mehrere Methoden, die jede für sich einfach ist.

Es bieten sich hier z.B. an:
- Eine Methode, die eine gültige Eingabe abfragt.
- Eine Methode, die prüft, ob in den ersten x Elementen eines Array bereits ein bestimmter Wert enthalten ist.
...

Durch so eine Untergliederung würde es deutlich einfacher, eine saubere Lösung zu finden.
 
H

Hallo1234

Aktives Mitglied
Das hatte ich anfangs auch so. Nur konnte dann das tipps[j] nicht übergeben werden, aus welchem Grund auch immer. Dann habe ich es gelassen, da die Aufgabe noch etwas umfangreicher wird, und ich sowieso mehrere Methoden machen muss. Hättest du vielleicht eine Idee, wie man das mit den Doppelgängern lösen kann?
 
kneitzel

kneitzel

Top Contributor
Du musst doch nur eine Methode schreiben, die das Array, wie viele Elemente bereits enthalten sind den gesuchten Wert übergeben ... die Methode selbst sollte dann doch recht einfach sein, oder?
 
H

Hallo1234

Aktives Mitglied
So habe ich es jetzt:
Java:
public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        
        System.out.println("Geben Sie bitte Ihre Tipps ein: ");
        
        int[] tipps = new int[6];
        
        for(int j = 0; j<tipps.length; j++) {
            
            System.out.print("Tipp "+(j+1)+" :");
            tipps[j] = s.nextInt();
        
        pruefeDoppelt(tipps, j);
            
        if(tipps[j]<=0 || tipps[j]>49) {
            System.out.println("Bitte noch einmal eingeben. Der Tipp war ungültig: ");
            j = j-1;
        }
    }
        //ermittleLosnummer();
}
    
    public static void pruefeDoppelt(int[] tipps, int durchlaeufe) {
        if(tipps[0] == tipps[durchlaeufe]) {
            System.out.println("Doppelt");
            }
    }

Aber zu der Doppelgängersache fällt mir immer noch nichts ein ☹️
 
kneitzel

kneitzel

Top Contributor
Also zum einen prüfst du immer gegen das Element 0 und das ist doch falsch. Du musst doch alle vorherigen Elemente prüfen, also brauchst du eine Schleife.

Und du willst ja nicht nur eine Ausgabe, sondern du willst ja abhängig vom Ergebnis etwas machen. Du musst also das Ergebnis zurück geben. Und damit das Ergebnis zuordnen ist, würde ich es umbenennen in istDoppelt. Wahr: ja, Falsch: nein ...

Also Rückgabetyp anpassen und einen entsprechenden Wert zurück geben ...
 
H

Hallo1234

Aktives Mitglied
Java:
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        
        System.out.println("Geben Sie bitte Ihre Tipps ein: ");
        
        int[] tipps = new int[6];
        
        for(int j = 0; j<tipps.length; j++) {
            
            System.out.print("Tipp "+(j+1)+" :");
            tipps[j] = s.nextInt();
        
        boolean pruefWert = istDoppelt(tipps, j);
        if(pruefWert == true) {
            System.out.println("Doppelt");
        }
            
        if(tipps[j]<=0 || tipps[j]>49) {
            System.out.println("Bitte noch einmal eingeben. Der Tipp war ungültig: ");
            j = j-1;
        }
    }
       //ermittleLosnummer();
}
    
    public static boolean istDoppelt(int[] tipps, int durchlaeufe) {
        boolean pruefWert = false;
        for(int i = 0; i<6; i++) {
        if(tipps[i] == tipps[durchlaeufe]) {
            pruefWert = true;
            }
        }
        return pruefWert;
    }

Jetzt wird mir nach jeder Eingabe, ob doppelt oder nicht, "Doppelt" ausgegeben 😐.
 
kneitzel

kneitzel

Top Contributor
Dann überleg doch, wie viele Elemente du prüfen musst. Wenn durchlaeufe z.B. 1 ist: bis wohin muss die Schleife laufen?
 
H

Hallo1234

Aktives Mitglied
Es hat geklappt!!! Vielen, vielen Dank für die tolle Anleitung. Wirklich super 👍
Hier zur Sicherheit noch mal der Code, falls dir noch Fehler auffallen:
Java:
import java.util.Scanner;
public class Lotto {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        
        System.out.println("Geben Sie bitte Ihre Tipps ein: ");
        
        int[] tipps = new int[6];
        
        for(int j = 0; j<tipps.length; j++) {
            
            System.out.print("Tipp "+(j+1)+" :");
            tipps[j] = s.nextInt();
        
        boolean pruefWert = istDoppelt(tipps, j);
        if(pruefWert == true) {
            System.out.println("Doppelt");
        }
            
        if(tipps[j]<=0 || tipps[j]>49) {
            System.out.println("Bitte noch einmal eingeben. Der Tipp war ungültig: ");
            j = j-1;
        }
    }
        ermittleLosnummer();
}
    
    public static boolean istDoppelt(int[] tipps, int durchlaeufe) {
        boolean pruefWert = false;
        for(int i = 0; i<durchlaeufe; i++) {
        if(tipps[i] == tipps[durchlaeufe]) {
            pruefWert = true;
            }
        }
        return pruefWert;
    }


Juhu :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Was bedeutet dieser Fehler? Java Basics - Anfänger-Themen 31
M Was bedeutet unchecked or unsafe operations? Java Basics - Anfänger-Themen 6
ZH1896ZH OOP Verstehe nicht was der Hinweis bedeutet, bitte um Hilfe! Java Basics - Anfänger-Themen 2
O Was bedeutet das hier 999_983? Java Basics - Anfänger-Themen 2
D Was bedeutet diese Schreibweise? Java Basics - Anfänger-Themen 9
W Was bedeutet im Struktogramm „zufall“ aufrufen (keine Parameterübergabe)? Java Basics - Anfänger-Themen 8
S Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 2
D Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 23
R Was bedeutet -1 Java Basics - Anfänger-Themen 2
V OOP Was bedeutet das "aBruch" Java Basics - Anfänger-Themen 6
U Was bedeutet $@ in der Linux Kommandozeile Java Basics - Anfänger-Themen 3
dave253 Was bedeutet (String args[])? Java Basics - Anfänger-Themen 6
D was bedeutet this. bei Konstruktoren? Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
G Methoden Was bedeutet return in einer Methode Java Basics - Anfänger-Themen 5
V Was bedeutet das? Java Basics - Anfänger-Themen 4
G zeile: Was bedeutet das in der Methode? Java Basics - Anfänger-Themen 4
Y Was bedeutet "this" ohne dem Punkt und dem Atrributnamen danach? Java Basics - Anfänger-Themen 2
M was bedeutet setEnabled Java Basics - Anfänger-Themen 12
F Was bedeutet '@'? Java Basics - Anfänger-Themen 3
F Frage von einem Neuling: Was bedeutet Scanner scanner ? Java Basics - Anfänger-Themen 5
K Schlüsselworte Was bedeutet oder was ist die SIGNATUR?? Java Basics - Anfänger-Themen 4
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
A Was bedeutet der Operator *= ? Java Basics - Anfänger-Themen 2
N Was bedeutet << Java Basics - Anfänger-Themen 5
G Was bedeutet diese Zeile? Java Basics - Anfänger-Themen 2
J Was bedeutet This. ? Java Basics - Anfänger-Themen 4
S Was bedeutet dieser ausdruck? Java Basics - Anfänger-Themen 9
D Was genau bedeutet und bewirkt dieses @override? Java Basics - Anfänger-Themen 15
J Was bedeutet dieses a [i].length? Java Basics - Anfänger-Themen 3
D Was bedeutet < > Java Basics - Anfänger-Themen 4
D Was bedeutet das ?: Java Basics - Anfänger-Themen 9
B Was bedeutet static<T>?? Java Basics - Anfänger-Themen 6
0 Was bedeutet dieser Generic-code? Java Basics - Anfänger-Themen 3
php1 Was bedeutet der Modifier static ? Java Basics - Anfänger-Themen 3
K Was bedeutet das eigentlich.... Java Basics - Anfänger-Themen 18
G Was bedeutet? Java Basics - Anfänger-Themen 7
G Was bedeutet charAt()? Java Basics - Anfänger-Themen 5
J Was bedeutet der Doppelpunkt ":" ? Java Basics - Anfänger-Themen 3
G was bedeutet //TODO Java Basics - Anfänger-Themen 4
A Was bedeutet folgende Programmcodezeile genau Java Basics - Anfänger-Themen 6
B was bedeutet "this" Java Basics - Anfänger-Themen 8
L Was bedeutet das Wort "this" ? Java Basics - Anfänger-Themen 2
K was bedeutet '?' Java Basics - Anfänger-Themen 3
R Was bedeutet diese Zeile. Java Basics - Anfänger-Themen 8
S was bedeutet Typisiert? Java Basics - Anfänger-Themen 3
D Was bedeutet : ? Java Basics - Anfänger-Themen 4
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
H Was bedeutet "class Liste<E>" Java Basics - Anfänger-Themen 2
J was bedeutet null Java Basics - Anfänger-Themen 7
P Compiler-Frage: Was bedeutet deprecated? Java Basics - Anfänger-Themen 4
P Was genau bedeutet Feld Java Basics - Anfänger-Themen 3
G Was bedeutet diese Fehlermeldung von Tomcat Java Basics - Anfänger-Themen 29
G indexOf() - was bedeutet -1 ? Java Basics - Anfänger-Themen 27
P Was genau bedeutet "public static void main(String[] ar Java Basics - Anfänger-Themen 10
G setName bei JTextfield. Was bedeutet das? Java Basics - Anfänger-Themen 7
B Was bedeutet synchronized? Java Basics - Anfänger-Themen 8
D was bedeutet " Seiteneffekt " ? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben