Fehlermeldung bei switch unklar

Status
Nicht offen für weitere Antworten.
S

späterGast

Gast
Hallo,
habe folgende Fehlermeldung zu diesem Prog (Ausschnitt) bekommen:
Code:
switch (x)
  {
    case 1:
      p=0.3f;break;
    case 2:
      p=0.5f;break;
    case 3:
      p=0.7f;break;
    case 4:
      p=1.2f;break;
    default: p=0;
  }
pb=m*p;

die fehlermeldung lautet:
test.java:35: variable p might not have been initialized
pb=m*p;
^
1 error
Im default ist doch die Festlegung für p getroffen, falls x einen anderen Wert als in case vorgesehen annimmt. Habe dann vor switch p auf 0 initialisiert und es klappt. Aber warum nicht so wie ich es erwartet habe?
Danke!
 

Jango

Gesperrter Benutzer
späterGast hat gesagt.:
Im default ist doch die Festlegung für p getroffen, falls x einen anderen Wert als in case vorgesehen annimmt. Habe dann vor switch p auf 0 initialisiert und es klappt. Aber warum nicht so wie ich es erwartet habe?
Danke!

Weil, wie schon die Fehlermeldung sagt, du die Variable vorher initialisieren musst. :wink:
 
S

späterGast

Gast
Da versteh ich wohl was falsch:
Initialisierung ist doch Wertzuweisung. Falls x einen ungeplanten Wert hat, soll p auf 0 gesetzt werden. Ist das nicht auch eine Initialisierung von p?
Danke für die schnelle Antwort
 

Jango

Gesperrter Benutzer
Ja, ist es. Aber du musst p initialisieren, bevor du es benutzt. Hast doch selber geschrieben, dass es funktioniert, wenn du p vorher einen Wert (zB. 0) zuweist. :?
 
G

Gast

Gast
das ist in der tat komisch, hätte gedacht der compiler wär schlau genug den default case zu erkennen
 
G

Guest

Gast
Jango hat gesagt.:
Ja, ist es. Aber du musst p initialisieren, bevor du es benutzt. Hast doch selber geschrieben, dass es funktioniert, wenn du p vorher einen Wert (zB. 0) zuweist. :?

du musst p initialisieren bevor du auf p lesend zugreifen willst. Das hast du hier allerdings getan in dem default case. Also insofern sollte da keine warnung kommen :shock:
 
G

Guest

Gast
Anonymous hat gesagt.:
du musst p initialisieren bevor du auf p lesend zugreifen willst. Das hast du hier allerdings getan in dem default case. Also insofern sollte da keine warnung kommen :shock:

Genau - und deshalb gehts ja auch nicht. Verblüffende Logik :toll:
 
G

Guest

Gast
Anonymous hat gesagt.:
Anonymous hat gesagt.:
du musst p initialisieren bevor du auf p lesend zugreifen willst. Das hast du hier allerdings getan in dem default case. Also insofern sollte da keine warnung kommen :shock:

Genau - und deshalb gehts ja auch nicht. Verblüffende Logik :toll:

hää?

Weiss jetzt hier jemand warum da der Fehler kommt?
 

Jango

Gesperrter Benutzer
Code:
pb=m*p;

Hier steckt der Fehler. Du benutzt eine nicht initialisierte Variable rechts von einer Zuweisung. Was soll denn pb zugewiesen werden, wenn der Compiler nicht weiß, wie groß p ist? Das wird doch erst zur Laufzeit bestimmt.

Edit: Initialisiere die Variable einfach vorher - dann gibts vom Compiler keine Meckerei. Compiler nörgeln bei sowas immer... :D
 
S

späterGast

Gast
Nun ja, p wurde bereits vor switch deklariert, und damit doch wohl auch ein Speicherbereich entsprechend reserviert. Und ich nahm eben an, daß über switch default die Initialisierung erfolgen müßte, wozu sonst default?
MfG
 

Jango

Gesperrter Benutzer
Eine Deklaration reserviert Speicher, ja und? Das hat doch absolut nichts mit der Initialisierung zu tun. :roll:
Und default ist dazu da, der Variablen einen Wert zuzuweisen, wenn keine Marke zutrifft. Das ist optional und kann theoretisch und auch praktisch weggelassen werden. Ich habe dir doch schon geschrieben, dass du unter der switch-Anweisung eine Variable für eine Zuweisung benutzt, deren Wert zur Kompilierzeit noch gar nicht feststeht. Woher soll denn der Compiler wissen, welche switch-Marke zur Laufzeit zutrifft - also ist p für ihn nicht initialisiert. Nach deiner Theorie hätte ja die Variable p zur Kompilierzeit, einschließlich default, fünf Werte. Überleg doch mal... :wink:

Sollte ich mich täuschen, belehre man mich eines Besseren. Wenn ich beim kompilieren solche Fehler erhalte, dann kriegt die Variable halt einen Startwert und fertig. Was ist daran so schwierig? Im Übrigen macht man das auch so.
Tschau
J.
 
B

Beni

Gast
Jango hat gesagt.:
Woher soll denn der Compiler wissen, welche switch-Marke zur Laufzeit zutrifft - also ist p für ihn nicht initialisiert. Nach deiner Theorie hätte ja die Variable p zur Kompilierzeit, einschließlich default, fünf Werte. Überleg doch mal... :wink:
Na, der Compiler sollte erkennen, dass p initialisiert wird, egal welche Marke angelaufen wird :wink:
Der Eclipse-Compiler scheint das übrigens zu erkennen ???:L
 
G

Guest

Gast
Jango hat gesagt.:
Eine Deklaration reserviert Speicher, ja und? Das hat doch absolut nichts mit der Initialisierung zu tun. :roll:
Und default ist dazu da, der Variablen einen Wert zuzuweisen, wenn keine Marke zutrifft. Das ist optional und kann theoretisch und auch praktisch weggelassen werden. Ich habe dir doch schon geschrieben, dass du unter der switch-Anweisung eine Variable für eine Zuweisung benutzt, deren Wert zur Kompilierzeit noch gar nicht feststeht. Woher soll denn der Compiler wissen, welche switch-Marke zur Laufzeit zutrifft - also ist p für ihn nicht initialisiert. Nach deiner Theorie hätte ja die Variable p zur Kompilierzeit, einschließlich default, fünf Werte. Überleg doch mal... :wink:

Sollte ich mich täuschen, belehre man mich eines Besseren. Wenn ich beim kompilieren solche Fehler erhalte, dann kriegt die Variable halt einen Startwert und fertig. Was ist daran so schwierig? Im Übrigen macht man das auch so.
Tschau
J.

sry aber das ist unsinn. Der Compiler weiss ja sogut wie nie zur compilezeit welchen wert erzuweisen soll. Es muss nur wissen ob da ein wert zugewiesen wird oder nicht. Und der default case garantiert das p auf jeden fall ein wert zugewiesen wird. Ist ist nicht möglich das p uninitialisiert ist zum zeitpunkt von
und das sollte der compiler entsprechend erkennen.
 

Jango

Gesperrter Benutzer
@ Gast - wenn das alles so ein Unsinn ist, dann erkläre mir bitte, woher der Fehler kommt? Wenn das alles richtig ist, und es ja eigentlich auch ohne Fehlermeldung abgehen müsste? :?:
Hab damit kein Problem, nicht recht zu haben. Aber auf eine Erklärung deinerseits, warum der Fehler kommt, warte ich noch...

Gast hat gesagt.:
"du musst p initialisieren bevor du auf p lesend zugreifen willst. Das hast du hier allerdings getan in dem default case. Also insofern sollte da keine warnung kommen"

Das hilft dem Frager genauso wenig, wie eine falsche Antwort! (sollte, könnte, hätte...)
 
G

Gast

Gast
warum da eine warnung kommt weiss ich nicht wie ich ja auch schon geschrieben hab, und ich meine ja auch das die unnötig ist und der compiler es also einfach nicht überprüft.

Eine falsche Antwort prägen sich leute ein und denken sie wäre richtig. Deswegen sollte man so etwas nicht einfach so stehen lassen.

btw. ich wollte dich nicht angreifen oder hier ein flamewar starten, also peace ;)
 

hupfdule

Top Contributor
Jango hat gesagt.:
@ Gast - wenn das alles so ein Unsinn ist, dann erkläre mir bitte, woher der Fehler kommt? Wenn das alles richtig ist, und es ja eigentlich auch ohne Fehlermeldung abgehen müsste? :?:
Auf die Antwort, warum die Fehlermeldung kommt, wartet der Fragesteller noch. Denn es gibt keinen Grund für diese Fehlermeldung. Es ist sicher, dass p initialisiert wird. Der Compiler hat keinen Grund hier etwas anzumeckern.
Die Aussage "Dann initialisier es halt...." ist da nicht wirklich hilfreich.

Da ich mir das auch nicht erklären konnte, folgender Testcode:

Code:
public class Test{   
    
    public static void main(String[] args){
        
        int x= Integer.parseInt(args[0]);
        float p;
        switch (x) {
            case 1:
                p=0.3f;break;
            case 2:
                p=0.5f;break;
            case 3:
                p=0.7f;break;
            case 4:
                p=1.2f;break;
            default: p=0;
        }
        
        System.out.println(p);
    }
}

Und, wie erwartet: Er kompiliert. Nun ist die Frage, warum kompiliert der Code des Fragestellers nicht? Vlt. etwas mehr Code posten, dass man das ganze erkennen kann.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ronny123 Erste Schritte Fehlermeldung Java Basics - Anfänger-Themen 1
F Fehlermeldung in Eclipse Java Basics - Anfänger-Themen 13
AllBlack Fehlermeldung Java Basics - Anfänger-Themen 19
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
Ostkreuz Fehlermeldung Java Basics - Anfänger-Themen 1
_so_far_away_ Fehlermeldung "Index 2 out of bounds for length 2" Java Basics - Anfänger-Themen 7
W Texteingabe - Bedeutung Fehlermeldung, Lösung? Java Basics - Anfänger-Themen 18
krgewb Fehlermeldung in web.xml Java Basics - Anfänger-Themen 4
W Warum diese Fehlermeldung? Java Basics - Anfänger-Themen 12
nbergmann Unverständliche Fehlermeldung Java Basics - Anfänger-Themen 56
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
J Fehlermeldung im Checkstyle Java Basics - Anfänger-Themen 11
S Fehlermeldung Java Basics - Anfänger-Themen 7
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
C Fehlermeldung Array zuweisen und printen Java Basics - Anfänger-Themen 22
J Fehlermeldung Java Basics - Anfänger-Themen 22
J Fehlermeldung: A JNI error Java Basics - Anfänger-Themen 3
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
JavaClara Fehlermeldung bei split-Methode Java Basics - Anfänger-Themen 12
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
C Fehlermeldung InOut. Java Basics - Anfänger-Themen 7
B Methoden if-statement error, FX, Fehlermeldung Java Basics - Anfänger-Themen 6
A Fehlermeldung Java Basics - Anfänger-Themen 5
H Comparator Fehlermeldung Java Basics - Anfänger-Themen 5
D Folgende Fehlermeldung bei der Installation von JAVAFX Java Basics - Anfänger-Themen 1
M Java heap space Fehlermeldung beheben Java Basics - Anfänger-Themen 3
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
S Bitte Hilfe zu Fehlermeldung am Handy Java Basics - Anfänger-Themen 2
H fehlermeldung Java Basics - Anfänger-Themen 447
H fehlermeldung Java Basics - Anfänger-Themen 9
T Fehlermeldung beim Starten von FlashTool Java Basics - Anfänger-Themen 27
C Fehlermeldung mit Intger. Java Basics - Anfänger-Themen 3
A Fehlermeldung Java Basics - Anfänger-Themen 3
D Wie kann man eine solche Fehlermeldung abfangen Java Basics - Anfänger-Themen 4
H Fehlermeldung bei der Ausführung eines Compilierten PRGs Java Basics - Anfänger-Themen 9
N Fehlermeldung beim ausführen des Programmes.. Java Basics - Anfänger-Themen 3
x-tshainge Fehlermeldung Java Basics - Anfänger-Themen 2
M Erste Schritte NetBeans Fehlermeldung Java Basics - Anfänger-Themen 2
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
N Fehlermeldung bei Methode Java Basics - Anfänger-Themen 12
I String index out of range Fehlermeldung Java Basics - Anfänger-Themen 4
I Fehlermeldung bei Darstellung von Arrays Java Basics - Anfänger-Themen 2
S Variablen JLabel backImagePanel Fehlermeldung Java Basics - Anfänger-Themen 3
A checkstyle Fehlermeldung Java Basics - Anfänger-Themen 1
G Compiler-Fehler Fehlermeldung Java Basics - Anfänger-Themen 3
Pr0m3theus Fehlermeldung ArrayList add Java Basics - Anfänger-Themen 12
Arabicabohne Fehlermeldung bei Eclipse Java Basics - Anfänger-Themen 23
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
TheMenox Fehlermeldung / Arrays, Enhanced For Loops Java Basics - Anfänger-Themen 16
D Compiler-Fehler Anfänger Fehlermeldung Java Basics - Anfänger-Themen 3
Henri Fehlermeldung Java Basics - Anfänger-Themen 2
K Erste Schritte Fehlermeldung Java Basics - Anfänger-Themen 2
I Fehlermeldung: Java does not contain a main type Java Basics - Anfänger-Themen 1
J Fehlermeldung : cannot invoke char(at) int on the primitive type int --- Anfänger Java Basics - Anfänger-Themen 5
J Bug? Seltsame Fehlermeldung Java Basics - Anfänger-Themen 7
J Fehlermeldung else without if Java Basics - Anfänger-Themen 5
J while(nst == 0) gibt Fehlermeldung Java Basics - Anfänger-Themen 4
L Fehlermeldung Java Basics - Anfänger-Themen 6
D Erste Schritte Fehlermeldung "Syntax error on token ";", { expected after this token" Java Basics - Anfänger-Themen 13
J Launcher Fehlermeldung Java Basics - Anfänger-Themen 0
A Fehlermeldung Unklar, google hilft auch nicht weiter Java Basics - Anfänger-Themen 2
H Compiler-Fehler Fehlermeldung Kompilier Java Basics - Anfänger-Themen 4
A Fehlermeldung Unklar. Java Basics - Anfänger-Themen 1
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
D Integer Fehlermeldung exception Java Basics - Anfänger-Themen 4
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
D Fehlermeldung beim Ausführen eines Java Programms Java Basics - Anfänger-Themen 4
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
S Vererbung Fehlermeldung: the hierarchy of the type "class name" is inconsistent Java Basics - Anfänger-Themen 10
D Fehlermeldung "com.element.JavaUpload.Manager" Java Basics - Anfänger-Themen 1
S Fehlermeldung bei format methode Java Basics - Anfänger-Themen 1
A Compiler-Fehler Fehlermeldung auf Mac Java Basics - Anfänger-Themen 3
K JDBC - Wie ist Fehlermeldung zu interpretieren Java Basics - Anfänger-Themen 3
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
N Fehlermeldung nicht nachvollziehbar Java Basics - Anfänger-Themen 5
S Class File Editor gibt beim Start der Programms die Fehlermeldung Source not found aus Java Basics - Anfänger-Themen 1
C addActionListener(this) - Fehlermeldung Java Basics - Anfänger-Themen 8
C Array List mit String vergleichen und Fehlermeldung ausgeben Java Basics - Anfänger-Themen 6
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
G Variablen Warum bekomme ich da eine Fehlermeldung? Java Basics - Anfänger-Themen 3
C GUI - SWT - Button-Fehlermeldung Java Basics - Anfänger-Themen 5
F Input/Output IOTools Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 16
K Erste Schritte Datei gelöscht - nun Fehlermeldung Java Basics - Anfänger-Themen 2
S Fehlermeldung Java Basics - Anfänger-Themen 8
E Fehlermeldung und Fenster wird nicht mehr angezeigt Java Basics - Anfänger-Themen 12
E Fehlermeldung Java Basics - Anfänger-Themen 13
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
J Fehlermeldung reagieren Java Basics - Anfänger-Themen 10
F Array Fehlermeldung... Java Basics - Anfänger-Themen 2
B Fehlermeldung bei Klasse mit array Java Basics - Anfänger-Themen 3
L Erste Schritte Fehlermeldung bei Array-Programm Java Basics - Anfänger-Themen 4
G Fehlermeldung: A fatal error has been detected by the Java Runtime Environment Java Basics - Anfänger-Themen 7
Gugelhupf JDK installieren Fehlermeldung 1336 - Java SDK 7 Update 5 x64 Java Basics - Anfänger-Themen 4
K Fehlermeldung nach editor installation Java Basics - Anfänger-Themen 3
P Input/Output JOptionPane Fehlermeldung Catchen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben