Avatar billede willi Nybegynder
02. september 2003 - 09:15 Der er 11 kommentarer og
1 løsning

Returnerer ikke parameterværdi i metode.

Når jeg kalder:

car.getDrive() i denne metode:

        public void addDrive(int drive)
        {  drive = drive;
        }

får jeg ingen værdi efter jeg har sendt en med car.addDrive(iKm);

Hvad er problemet? Klassen er nedenfor.

public class ExerciseP3_4

{           
        public ExerciseP3_4(int aFuelEff)
        {  fuelEff = aFuelEff;
            tank = 0;
            drive=0;
        }
               
        public void addDrive(int drive)
        {  drive = drive;
        }
                       
        public void addFuel(int fuel)
        {     tank = tank+fuel;
            fuelLevel = tank-(this.drive/fuelEff);
        }
       
            public int getDrive()
        {     return drive;
        }
       
        public int getTank()
        {     return tank;
        }
       
        public int getFuelLevel()
        {    return fuelLevel;
        }
       
        private int fuelEff;
        private int drive;
        private int tank;
        private int fuelLevel;

}
Avatar billede europe Nybegynder
02. september 2003 - 09:19 #1
Prøv at ændre lidt i add metoden

        public void addDrive(int drive)
        {  this.drive = drive;
        }

Det kunne muligvis være "this" der mangler...
Avatar billede jakoba Nybegynder
02. september 2003 - 09:20 #2
du mener nok:
        public void addDrive(int drive)
        {  this.drive = drive;
        }
så compileren kan skelne imellem metode parameteren (der hedder 'drive')
og klassens variabel (der hedder 'drive')

mvh JakobA
Avatar billede willi Nybegynder
02. september 2003 - 10:14 #3
Det hjalp. Men jeg mener nok at jeg havde forsøgt :)
Men kan jeg ikke hente variablen this.drive ind i metoden addFuel

public void addDrive(int drive)
      {  this.drive = drive;
      }
                                   
public void addFuel(int fuel)
    {     tank = fuel;
        fuelLevel = tank-this.drive;
    }
Avatar billede europe Nybegynder
02. september 2003 - 10:18 #4
I metoden..
public void addFuel(int fuel)
    {    tank = fuel;
        fuelLevel = tank-this.drive;
    }

Skal du heller ikke bruge "this". Grunden til at du skulle bruge this i den første var - som Jakob skrev - at metoden kan kende forskel på ind-variabel og på klasse-variable. This angiver at det er klassen variabel der referes til.
Avatar billede willi Nybegynder
02. september 2003 - 10:26 #5
Men det gør vel ikke noget?
.this i tank-this.drive er vel blot en implicit (?) som jeg så blot skriver (hvilket er naturligvis er overflødigt).
Men værdien af variablen drive skulle jeg vel uden problemer kunne hente ind i metoden addFuel?
(PS det er måske et nyt sp. Men jeg hæver gerne pointene)
Avatar billede europe Nybegynder
02. september 2003 - 10:37 #6
Så vidt jeg kan se har du ret i at det skulle ikke gøre noget om man skrev this foran...
Får du en eller anden form for kompilerings fejl eller er det på runtime du kan se fejlen ???
Og det skulle ikke være noget i vejen med at hente variablen ind i addFuel - dog skal du huske at sætte en værdi i variablen drive først, før den hentes ind i add fuel....
Avatar billede willi Nybegynder
02. september 2003 - 10:48 #7
Nej. Der er ingen kompileringsfejl. jeg prøver at se på det med værdien. Men er temelig sikker på at der er en værdi ind.
Avatar billede europe Nybegynder
02. september 2003 - 10:56 #8
Det var en god ide - det er det eneste jeg lige kan se er galt ...
Du må vende tilbage hvis du ikke kan finde fejlen - så må vi kigge lidt mere på det...
Avatar billede jakoba Nybegynder
02. september 2003 - 11:23 #9
Java laver heltalsdivision på integer variable hvis du ikke fortæller den skal gøre noget andet.  Så hvis drive == 2  og  fuelEff == 3 (størren end 2) vil  drive/fuelEff give 0
Avatar billede europe Nybegynder
02. september 2003 - 11:29 #10
Selvfølgelig Jakob - godt set.... Det er en af de fejl man kan lede længe efter... :)
Avatar billede jakoba Nybegynder
02. september 2003 - 11:33 #11
og det giver det naturligvis også hvis du ikke har givet drive en værdi med addDrive( vaerdi );
Avatar billede willi Nybegynder
02. september 2003 - 21:30 #12
Det muligt at det er det jakoba.
Nu virker den ihvertfald og jeg gider ikke at lede efter åresagen før imorgen.
Mangen tak for hjælpen (til jer begge)

public class ExerciseP3_4

{           
        public ExerciseP3_4(int aFuelEff)
        {  fuelEff = aFuelEff;
            tank = 0;
            drive=0;
        }
               
        public void addDrive(int drive)
      {  this.drive = drive;
      fuelLevel = tank-drive/fuelEff;
      }
                                   
        public void addFuel(int fuel)
        {     tank = fuel;
        }
       
        public int getDrive()
        {     return drive;
        }
       
        public int getTank()
        {     return tank;
        }
       
        public int getFuelLevel()
        {    return fuelLevel;
        }
       
        public int getFuelEff()
        { return fuelEff;
        }
       
        private int fuelEff;
        private int drive;
        private int tank;
        private int fuelLevel;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester