Java - Variable nicht angegeben?

Moin,
in der Schule lernen wir seit diesem Jahr Java, hab da heute eine Übung bekommen und der Compiler meint immer
Code:
variable preis might not haven been initalized
Ich hab leider keine Ahnung warum es nicht funktioniert.

Das "Programm" soll die Preis von Anbieter X und Y ermitteln und in einer anderen Methode vergeleichen, welche günstiger ist. Hier ist mal der Code:
Code:
public class faehrentarif
{
    
    public faehrentarif()
    {   
        // Instanzvariable initialisieren
   
    }   
    
    public double preisX(double laenge)                   //Länge muss in Meter angegeben werden!
    {   double erg, laengeCM, preis, preis_e;
        if (laenge<4)
        {   preis=0;
            laengeCM=laenge*100;                         //Meter in cm
            erg=laengeCM*35;                            //Länge des Fahrzeugs  den Preis pro cm
            preis=erg/100;                             //Ergebniss in Euro umrechnen, war bisher in Cent
            
        }
        if (laenge>4 && laenge<7.5)
        {   preis=0;
            laengeCM=laenge*100;
            erg=laengeCM*22;
            preis_e=erg/100;
            preis=preis_e+52;
            
        }
        if (laenge>7.5 && laenge<12)
        {   preis=0;
            laengeCM=laenge*100;
            erg=laenge*15;  
            preis_e=erg/100;
            preis=preis_e+104.5;                          //Ergebniss+Grundgebühr
            
        }
        return preis;
    }
    
    public double preisY(double laenge)
    {   double ergY;
        ergY=0.27*laenge+19.7;
        return ergY;
    }
    
    public void billigsterAnbieter(double autolaenge)
    {   double preis=0;
        if (preisX(autolaenge)<preisY(autolaenge))
        {  preis=preisX(autolaenge);
            System.out.println("Anbieter X ist mit dem Preis" + preis + " günstiger.");
        }
        else
        {   preis=preisY(autolaenge); 
            System.out.println("Anbieter Y ist mit dem Preis" + preis + " günstiger.");
        }
    }      
            
}
 
Hallo,
was gibt denn die Funktion preisX zurück, wenn ich als laenge z.B. 100 angebe?

PS: Kleiner Logikfehler evt. in Zeile 19? Na?
 
Zeile 19 ist korrigiert. Wenn preisX(100) ist müsste eine Fehlermeldung kommen, die Fahrzeuge dürfen maximal 12m lang sein. Muss ich noch reinschreiben, danke für den Hinweis.
 
Der Compiler meckert weil du unter Umständen eine nicht initialisierte Variable (preis Zeile 35) zurück gibst. Da du sowieso bei jeder "Verzweigung" preis auf 0 setzt, solltest du das einfach gleich am Anfang der Funktion tun ... dann ist die Variable auch initialisiert.
 
Außerdem solltest du nicht nur die <, > Relationen verwenden.
Wenn man bei laenge nun genau 4 angibt, ist "laenge < 4" und "laenge > 4" beides nicht erfüllt.
Dazu gibt es auch die größer-/Kleiner-Gleich zeichen >= und <=, womit die diese Fälle abdecken solltest.
Am einfachsten läuft es aber über eine verschachtelte Fallunterscheidung

Code:
...
double preis = 0.0;
if (laenge < 4) {
  preis = ...
} else if (laenge < 7.5) {
  preis = ...
} else if (laenge <= 12) {
  preis = ...
} else {
  throw new IllegalArgumentException("Die Laenge darf nicht groesser als 12 sein!");
}
...

mfg, metax.
 
Zurück
Oben