Integer initialisieren bei do-while-Schleife

b1ck

Mitglied
Hallo,
dies ist mein erster Beitrag in diesem Forum. Ich bin zurzeit dabei, mir die Java-Grundlagen anzueignen. Beim lernen/üben ist mir heute aufgefallen, das ich einen Fehler bekomme, wenn ich den für die do-while-Schleife verwendeten Integer nicht initialisiere. Dies scheint früher aber wohl so funktioniert zu haben?! Ich bin mir aber dessen bewusst, das man eine Variable immer initialisieren sollte ^^

MFG
 

Tarrew

Top Contributor
Es werden nur Klassen und Instanzvariablen mit einem Standardwert initialisiert.

Lokale Variablen müssen immer manuell initialisiert werden. Ist wohl eine Designentscheidung. Aus der Spezifikation:
Every variable in a program must have a value before its value is used:

  • Each class variable, instance variable, or array component is initialized with a default value when it is created
  • [...]
  • A local variable must be explicitly given a value before it is used, by either initialization or assignment, in a way that can be verified by the compiler using the rules for definite assignment.
 

b1ck

Mitglied
So funktioniert der Code:

Java:
import java.util.Scanner;

public class SchleifeDo
{
    public static void main(String[] args)
    {
        Scanner leser = new Scanner(System.in);
        int anzahl = 0;
        do
        {
            System.out.print("Anzahl eingeben, min. 1, max 10: ");
            String eingabe = leser.nextLine();
            switch(eingabe)
            {
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
            case "9":
            case "10":
                anzahl = Integer.parseInt(eingabe);
                break;
            default:
                System.out.println("Falsche Eingabe, bitte erneut versuchen");
            }
        }
        while(anzahl<1 || anzahl>10);
    
        leser.close();
        System.out.printf("Anzahl: %d%n", anzahl);
    }
}

So funktioniert er nicht:

Java:
import java.util.Scanner;

public class SchleifeDo
{
    public static void main(String[] args)
    {
        Scanner leser = new Scanner(System.in);
        int anzahl;
        do
        {
            System.out.print("Anzahl eingeben, min. 1, max 10: ");
            String eingabe = leser.nextLine();
            switch(eingabe)
            {
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
            case "9":
            case "10":
                anzahl = Integer.parseInt(eingabe);
                break;
            default:
                System.out.println("Falsche Eingabe, bitte erneut versuchen");
            }
        }
        while(anzahl<1 || anzahl>10);
    
        leser.close();
        System.out.printf("Anzahl: %d%n", anzahl);
    }
}

Fehlermeldung:

Java:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    The local variable anzahl may not have been initialized
    The local variable anzahl may not have been initialized
    The local variable anzahl may not have been initialized

    at SchleifeDo.main(SchleifeDo.java:31)

Wobei es ja hier ohne die Initialisierung keine Probleme gibt:

Java:
int whatever;
String schsch = "5";
whatever = Integer.parseInt(schsch);
 
Zuletzt bearbeitet:

Tarrew

Top Contributor
Naja im letzten Beispiel, initialisierst du den Wert ja auch mit whatever =Integer.parseInt(schsch);. Da spielt es keine Rolle ob er vorher anders initialisiert war oder nicht.

Dein zweites Beispiel funktioniert nicht, weil lokale Variablen per Definition manuell initialisiert werden müssen bevor sie genutzt werden können. Angenommen du würdest die Zahl 15 eingeben, dann würdest du in den default-Teil deiner switch-case Anweisung kommen.
anzahl wäre also immer noch nicht initialisiert und danach würdest du aber versuchen die Abbruchbedingung der while-Schleife aufzuwerden, was nicht funktionieren kann, weil anzahl garnicht initialisiert ist. Deswegen kompiliert das ganze erst garnicht. anzahl hat eben auch keinen Standardwert 0 oder irgendwas.

Wenn du im default-Teil sagen würdest:
anzahl=irgendwas, dann wäre der Compiler wohl schlau genug zu erkennen, dass anzahl vor dem Prüfen der while-Bedingung initialisiert ist. a hat eben auch keinen Standardwert 0 oder irgendwas.
 

b1ck

Mitglied
Okay, soweit klar. Aber von einer Initialisierung spricht man doch eigentlich nur, wenn eine Zuweisung direkt in der Deklaration erfolgt? Sollte man dementsprechend auch Stringvariablen immer erst mit null initialisieren, oder ist dass hier überflüssig, weil dies automatisch geschieht?
 

VfL_Freak

Top Contributor
Aber von einer Initialisierung spricht man doch eigentlich nur, wenn eine Zuweisung direkt in der Deklaration erfolgt?
Nö, wie kommst Du darauf??
Du kannst eine Variable irgendwo deklarieren und erst später initialisieren.
Beispiel:
Java:
int test,
...
test = 5;
Du darfst nur VOR der Initialisierung nichts mit der Variable machen!!

Sollte man dementsprechend auch Stringvariablen immer erst mit null initialisieren, oder ist dass hier überflüssig, weil dies automatisch geschieht?
In Deinem Beispiel MUSST Du es sogar, sonst wäre der String ja beim anschließenden 'parseInt' nicht initialisiert und es flöge wieder eine Exception !!
Im Grunde vergleichst Du aber Äpfel mit Birnen ...

Gruß Klaus
 

Tarrew

Top Contributor
Sollte man dementsprechend auch Stringvariablen immer erst mit null initialisieren, oder ist dass hier überflüssig, weil dies automatisch geschieht?

Es werden nur Klassen und Instanzvaraiblen (welche keine Primitiven sind) automatisch auf null gesetzt.
Java:
public class Test {
    String s1; //wird automatisch mit null initialisiert

    public void printInstanceVariable() {
        System.out.println(s1);//funktioniert, da s1 eine Instanzvariable ist, die automatisch initialisiert wird
    }

    public void printLocalVariable(){
        String s2; //lokale Variablen werden nicht automatisch initialisiert
        System.out.println(s2); //kompiliert nicht, da s2 nicht initialisiert ist.
    }
}
 

b1ck

Mitglied
Nö, wie kommst Du darauf??
Du kannst eine Variable irgendwo deklarieren und erst später initialisieren.

Das hatte ich vorhin genau so gelesen, deswegen die Frage ^^
http://www.c-howto.de/tutorial-variablen-deklaration.html
Wobei ich auf diese Seite nur zufällig beim Googlen gestoßen bin.
Diese ist normalerweise keine meiner Quellen.

In Deinem Beispiel MUSST Du es sogar, sonst wäre der String ja beim anschließenden 'parseInt' nicht initialisiert und es flöge wieder eine Exception !!
Im Grunde vergleichst Du aber Äpfel mit Birnen ...

Das meinte ich jetz eher allgemein, nicht auf dieses Beispiel bezogen. Hier ist mir der Zusammenhang klar.

Es werden nur Klassen und Instanzvaraiblen (welche keine Primitiven sind) automatisch auf null gesetzt.

Ja stimmt, da war ja was ^^

Danke erstmal für eure Hilfe :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
sserio printf integer formatting Java Basics - Anfänger-Themen 17
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
T Java Integer multiplizieren Java Basics - Anfänger-Themen 6
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
C Integer in Vierer-Zahlblöcke aufteilen Java Basics - Anfänger-Themen 11
L integer Java Basics - Anfänger-Themen 6
Zeppi Integer umschreiben Java Basics - Anfänger-Themen 5
rafi072001 Integer Anomalie Java Java Basics - Anfänger-Themen 7
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V int zu Integer und String Java Basics - Anfänger-Themen 6
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
K String in Integer umwandeln Java Basics - Anfänger-Themen 4
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
CptK Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
L String in Integer umwandeln Java Basics - Anfänger-Themen 3
K Datentypen String zu Integer parsen Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
S Integer aus Array filtern Java Basics - Anfänger-Themen 4
F Referenzvariable vom Typ "Integer" definieren. (Klausuraufgabe) Java Basics - Anfänger-Themen 5
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
H Bubblesort-Zwei Integer auf Dekade vergleichen. Java Basics - Anfänger-Themen 6
B Variablen integer im Array Java Basics - Anfänger-Themen 5
C Liste o.ä. erstellen mit <Integer, <Integer, String> Java Basics - Anfänger-Themen 7
R Kompletten String umwandeln in Integer Java Basics - Anfänger-Themen 10
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Orkanson Datentypen Integer in String umwandeln/hinzufügen Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
D Fehler: String zu Integer Java Basics - Anfänger-Themen 7
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
E Integer und Array übergeben Java Basics - Anfänger-Themen 9
W Fehler bei Integer.parseInt() Java Basics - Anfänger-Themen 4
R String in Integer Java Basics - Anfänger-Themen 11
D Komischer Fehler nach <Integer> List Java Basics - Anfänger-Themen 2
J Integer in Array einlesen Java Basics - Anfänger-Themen 14
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
H Integer in Datei schreiben Java Basics - Anfänger-Themen 2
B OOP Cannot instantiate the type AuDList<Integer> Java Basics - Anfänger-Themen 18
3 ArrayList Integer Wrapper Klasse als Ersatz für normale Arrays Java Basics - Anfänger-Themen 10
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
E Erste Schritte Lower Bounded Wildcards <? super Integer> Java Basics - Anfänger-Themen 1
M Datentypen Integer und Float Konflikt Java Basics - Anfänger-Themen 3
J Integer-Werte in Array ein- bzw. auslesen Java Basics - Anfänger-Themen 7
T Integer Wert in andere Methode übergeben Java Basics - Anfänger-Themen 2
N Probleme bei Speicherung eines Integer-Array in Datei speichern Java Basics - Anfänger-Themen 3
C Zwei Integer Arrays "kombinieren" Java Basics - Anfänger-Themen 10
D Integer Fehlermeldung exception Java Basics - Anfänger-Themen 4
M Höchster Integer aus 9 Zahlen Java Basics - Anfänger-Themen 13
I Klassen Integer von BL in GUI übergeben | Fehler Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
D Datentypen Ein Integer Feld in einen String wandeln ohne Nullenunterdrückung Java Basics - Anfänger-Themen 6
R integer zahlenfolge speichern, ausgeben Java Basics - Anfänger-Themen 1
L Summer aller Integer-Zahlen im Intervall [x,y] Java Basics - Anfänger-Themen 6
K ArrayList<Integer> problem Java Basics - Anfänger-Themen 3
L Vom Benutzer eingebene Integer addieren und ausgeben. Java Basics - Anfänger-Themen 11
S integer absteigend sortieren Java Basics - Anfänger-Themen 2
S ArrayList<ArrayList<Integer>> sortieren Java Basics - Anfänger-Themen 3
T Variablen Integer in Stmt Java Basics - Anfänger-Themen 13
B gemischter string zu integer Java Basics - Anfänger-Themen 22
R Big Integer Java Basics - Anfänger-Themen 8
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
B Variablen Wertezuweisung bei integer Java Basics - Anfänger-Themen 5
J Integer Werte in Array einlesen Java Basics - Anfänger-Themen 6
E Integer oder Strings spiegeln (in while loop) Java Basics - Anfänger-Themen 6
D String mit Integer Variablen Namen vergleichen, möglich? Java Basics - Anfänger-Themen 6
G Was passiert bei einem Overflow von zwei Integer Java Basics - Anfänger-Themen 6
H Integer.toString(int i) vs. String.valueOf(int i) Java Basics - Anfänger-Themen 12
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
N Probleme beim Rechnen mit Integer und double Java Basics - Anfänger-Themen 4
A Integer aus Stream to Double Java Basics - Anfänger-Themen 7
J Integer.parseInt Java Basics - Anfänger-Themen 23

Ähnliche Java Themen

Neue Themen


Oben