Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe am anfang vom quellcode folgende variablen initialisiert
Code:
int summe = 0;
boolean eingabeAufforderung = false;
meiner meinung nach ist ja der boolean wert von eingabeAufforderung ja schon standardmässig auf false oder? (das gleiche übrigens auch bei summe) wenn ich jedoch das ganze nur so schreibe
Code:
int summe;
boolean eingabeAufforderung;
sagt mir eclipse,
the local variable eingabeAufforderung(oder summe) may not has been initialized
wieso? kann mir jemand da helfen?
Code:
import java.io.*;
/**
* Es werden 5 Zahlen über die Tastatur eingetippt und dann zusammengezählt. Eine
* Eingabeaufforderung kann eingeschaltet oder ausgeschaltet werden. Die equals()
* Methode überprüft was eingetippt wurde (ja/nein).
*
**/
public class EqualSumme {
public static void main(String[] args) throws IOException {
int summe = 0;
String antwort = "ja";
boolean eingabeAufforderung = false;
BufferedReader eingabe = new BufferedReader( new InputStreamReader(System.in));
// Eingabe des Benutzers über String inText einlesen
System.out.print("Eingabeaufforderung <ja> oder <nein>? ");
String inText = eingabe.readLine();
// Die Objekte miteinander vergleichen und Flag setzen
if (inText.equals(antwort)){
eingabeAufforderung = true;
}
// Schleife die den Benutzer 5 mal auffordert eine Zahl einzugeben
for (int i = 0; i < 5; i++){
if (eingabeAufforderung == true){
System.out.print("Geben Sie die " + (i+1) + (". Zahl ein: "));
}
String inData = eingabe.readLine(); // Eingabe des Benutzers wird gespeichert in inData
summe += Integer.parseInt(inData); /* String wird über die Wrapper Klasse zu Integer.
summe speichert m und zählt das neue m immer wieder
dazu */
}
System.out.println("Gesamtsumme: " + summe);
}
}
Lokale Variablen müssen vor ihrer Benutzung einen Wert zugewiesen bekommen.
Instanzvariablen und Klassenvariablen werden vom Compiler per default initialisiert.
Der Grund dafür - und danach war ja gefragt - ist aber der, daß lokale Variablen automatisch generiert werden, also auf im Zweifel auf dem Stack. Nach dem Verlassen des lokalen Kontexts existieren diese Variablen nicht mehr. Statische Klassenvariablen und nichtstatische Instanzvariablen dagegen müssen fest referenziert sein (klassisch gesehen: an einer bestimmten Adresse liegen), damit man z.B. auch "von außen" auf sie zugreifen kann. Sie existieren also unabhängig davon, in welchem lokalen Kontext man sich aufhält. Insofern lohnt es sich auch, sie bei ihrer Erstellung zu initialisieren, denn die Erstellung erfolgt ja z.B. pro Instanz nur einmal. Würden man allerdings die lokalen Variablen in jedem lokalen Kontext bei jedem Eintritt auf einen Defaultwert setzen, hätte das u.U. sehr große Performanceverluste zur Folge.