class Bonus
{
public static void main(String[] args)
{
//Deklaration
int karte;
double umsatz, bonus;
String akartentyp, plus, standard;
//Definition
umsatz = Double.parseDouble(args[0]);
akartentyp = args[1];
//Abfrage Kartentyp
if(akartentyp.equals("standard"))
{
karte=1;
}
else if (akartentyp.equals("plus"))
{
karte=2;
}
else if (akartentyp.equals("vip"))
{
karte=3;
}
else
{
System.out.println("Falscher Kartentyp!\n" + "Bitte starten Sie das Programm neu.");
}
// Abfrage Umsatz <500
if(umsatz<500)
{
String s="Sie bekommen die Standard-Karte und einen Einkaufsgutschein im Werte von ";
if (karte==1)
{
System.out.println(s + (umsatz/100*2)+" Euro");
}
else if (karte==2)
{
System.out.println(s + (umsatz/100*3)+" Euro");
}
else
{
System.out.println(s + (umsatz/100*5)+" Euro");
}
}
// Abfrage Umsatz <1000
else if (umsatz<1000)
{
String s="Sie bekommen die Plus-Karte und einen Einkaufsgutschein im Werte von ";
if (karte==3)
{
System.out.println(s + (umsatz/100*5)+" Euro");
}
else
{
System.out.println(s + (umsatz/100*3)+" Euro");
}
}
// Abfrage Umsatz >=1000
else
{
String s="Sie bekommen die VIP-Karte und einen Einkaufsgutschein im Werte von ";
System.out.println(s + (umsatz/100*5)+" Euro");
}
}
}
Gibt er mir folgende Fehlermeldung:
Code:
C:\javaprogs>javac Bonus1.java
Bonus1.java:37: variable karte might not have been initialized
if (karte==1)
^
Bonus1.java:54: variable karte might not have been initialized
if (karte==3)
^
2 errors
Ich denke ma es liegt oben an der "Abfrage Kartentyp". Ich finde kein Fehler, aber frage mich ob man überhaupt zwei mal else if hintereinnander benutezn darf. Auch ist mir ein Rätsel warum er nicht bei karte==2 weint.
Im Else-Fall bleibt die Variable "karte" uninitialisiert
Code:
int karte;
...
if(akartentyp.equals("standard"))
{
karte=1;
}
else if (akartentyp.equals("plus"))
{
karte=2;
}
else if (akartentyp.equals("vip"))
{
karte=3;
}
else
{
// *** In diesem Fall bleibt die Variable "karte" nicht initialisiert. ***
System.out.println("Falscher Kartentyp!\n" + "Bitte starten Sie das Programm neu.");
}
...
else {
System.out.println("Falscher Kartentyp!\n" + "Bitte starten Sie das Programm neu.");
return;
}
Man könnte das ganze natürlich in Methoden auslager und dann mit Exceptions oder vielleicht sogar return codes arbeiten, aber ich glaube das führt am schnellsten zum Ziel. Wenn der Kartentyp falsch ist, kann man auch nichts weiter machen.
am besten schachtelst du so wenig wie möglich, der code so ja für andere und auch für dich noch nachvollziehbar sein. Deshalb bau dir eine reihe assertions auf so in der wie in meinem betrag vorher. Wenn du aus dem ersten Block rausbist, dann weißt du mit sicherheit das dannach ein wert gesetzt ist.
Assert ist zwar ein Schlüsselwort in Java, aber ich mein da eher einen Programmierstil. Am besten ein Beispiel:
Code:
// unübersichtlich (ohne zusicherungen)
public void gebeDateiNamenAus(File datei) {
if(datei != null && datei.exists() && datei.canRead()) {
System.out.println(datei.getName());
}
}
// so übersichtlich (mit Zusicherungen)
public void gebeDateiNamenAus(File datei) {
if(datei == null){
return;
}
// ab jetzt weiß ich die datei ist ein initialisiertes Objekt
if(!datei.exists()) {
return;
}
// ab jetzt weißt du die Datei existiert
if(!datei.canRead()) {
return;
}
// ab jetzt weißt du, die Datei kann gelesen werden
System.out.println(datei.getName());
}