Auto tanken

Status
Nicht offen für weitere Antworten.

Chili

Aktives Mitglied
Hi!
Ich habe folgendes Problem:
Wenn man die Methode fahren aufruft wird zwar der Kilometerstand erhöht, aber der Benzinstand sinkt nicht. Ich kann den Fehler nicht finden.

Code:
public class Auto
{

    int tankvolumen;
    int benzinstand;
    int verbrauch;
    int kmstand;

    public Auto(int benz, int km)
    {
        tankvolumen = 70;
        benzinstand = benz;
        verbrauch = 9;
        kmstand = km;
    }
    
    public void Tanken(int liter)
    {
        System.out.println("Tanken:");
        int differenz = tankvolumen - benzinstand;
        if(liter <= differenz)
        {
            benzinstand = benzinstand + liter;
            int zaehler = 0;
            while (zaehler < liter)
            {
                System.out.print("*");
                try 
                {
                    Thread.sleep(1000);
                } 
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                } 
                zaehler++;
            }
            System.out.println("");
            System.out.println("Sie haben " +liter +" Liter getankt.");
            System.out.println("Ihr Benzinstand beträgt nun " +benzinstand +" Liter.");
            System.out.println("");
        }
        if(liter > differenz)
        {
            benzinstand = benzinstand + differenz;
            int zaehler = 0;
            while (zaehler < differenz)
            {
                System.out.print("*");
                try 
                {
                    Thread.sleep(1000);
                } 
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                } 
                zaehler++;
            }
            System.out.println("");
            System.out.println("Brechen Sie den Tankvorgang ab!");
            System.out.println("Sie haben " +differenz +" Liter getankt.");
            System.out.println("Ihr Tank ist voll.");
            System.out.println("");
        }
    }
    
    public void fahren(int km)
    {
        int verb;
        int hundertstel;
        hundertstel = km / 100;
        verb = hundertstel * verbrauch;
        kmstand = kmstand + km;
        benzinstand = benzinstand - verb;
        if((benzinstand <= 10)&&(benzinstand > 0))
        {
            System.out.println("Sie haben noch maximal 10 Liter Benzin.");
            System.out.println("Tanken Sie bitte ihr Fahrzeug auf!");
            System.out.println("");
        }
        if(benzinstand == 0)
        {
            System.out.println("Ihr Tank ist leer.");
            System.out.println("Bitte rufen sie jemanden an, der Ihnen Benzin brigen oder Sie abholen kann!");
            System.out.println("");
            kmstand = kmstand - km;
        }
    }
}
 
B

Beni

Gast
"int" kann nur Ganzzahlen ausdrücken. Wird ein "int" durch einen "int" geteilt, ist das Ergebnis immer die abgerundete Zahl des "echten" Ergebnisses.

Bruchzahlen kannst du mit "double" darstellen, und das würde ich dir für den benzinstand empfehlen, und vorallem für die "hundertstel". Weil "100" ein int ist, wird die Division immernoch nicht richtig funktionieren, deshalb schreib "100.0" hin (das ist ein double), dann wird "hunderstel" auch Werte wie "0.243" annehmen können.
 

Chili

Aktives Mitglied
Hmmm...funktioniert immer noch nicht. Ich habe jetzt alle Variablen die irgendwas damit zu tun haben von int auf double umgestellt, aber geändert hat sich nichts. Ne Fehlermeldung beim compilieren gabs ja vorher auch nicht...genau wie jetzt. Es ist einfach so, dass wenn man die Methode fahren aufruft und einige km eingibt und man das Objekt danach inspiziert, sich nichts am Benzinstand verändert hat.
 

Illuvatar

Top Contributor
Hast du auch die int km, die der Methde übergeben werden, geändert oder die 100 in 100.0? Weil ansonsten gibt das km / 100 immer noch 0.
 

Chili

Aktives Mitglied
Danke das war der Fehler - ich werde glaube ich in Zukunft driekt überall nur noch doubles verwenden, dann hat man keine Probleme...
 

RicoSoft

Aktives Mitglied
ne, keine gute idee- gibt dann so sachen wie rundungsfehler u.ä. einfach immer das richtige verwenden, kommt schon gut.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben