Avatar billede jones279 Nybegynder
12. december 2004 - 16:38 Der er 10 kommentarer og
1 løsning

Nybegynder problem med for og while

Jeg er ved at gennemgå javabog.dk og er i gang med kapitel 2... Jeg er ved den opgave om befordringsgodtgørelse... problemet er, at den kører while løkkerne helt igennem - hvordan får jeg den til at stoppe når den når mine begrænsninger som defineret i for løkken?

public class Befordringsfradrag
{
    public void main()
    {
        int a = 0;      //Fra 0-24km er fradraget 0øre pr. km
        int b = 154;    //Fra 24-100km er fradraget 154øre pr. km
        int c = 77;    //Fra 100km og opefter er fradraget 77øre pr. km
       
        int antalKm = 10;
        int stopKm = 75;
        int spring = 1;
       
        for(int n = antalKm;n<=stopKm;n=n+spring)
        {
            while(antalKm <=24)
            {
                System.out.println("For " + antalKm + "km får du " + a + "øre pr. km i fradrag");
                antalKm = antalKm + spring;
            }
            while(antalKm >=25 && antalKm <=99)
            {
                System.out.println("For " + antalKm + "km får du " + b + "øre pr. km i fradrag");
                antalKm = antalKm + spring;
            }
            while(antalKm >= 100 && antalKm <=1000)
            {
                System.out.println("For " + antalKm + "km får du " + c + "øre pr. km i fradrag");
                antalKm = antalKm + spring;
            }
        }
       
    }
}
Avatar billede arne_v Ekspert
12. december 2004 - 16:43 #1
Det du spørger om: du skal nok ligge en yderligere betingelse ind i while løkken.

Men jeg tror at det program skal laves mere om !
Avatar billede arne_v Ekspert
12. december 2004 - 16:44 #2
Jeg tror muligvis at:

while(antalKm <=24)
            {
                System.out.println("For " + antalKm + "km får du " + a + "øre pr. km i fradrag");
                antalKm = antalKm + spring;
            }

skal erstattes af:

if(n <=24)
            {
                System.out.println("For " + n + "km får du " + a + "øre pr. km i fradrag");
            }

(og tilsvarende for de andre 2)
Avatar billede jps6kb Novice
12. december 2004 - 16:57 #3
Hvis jeg har forstået problemet korrekt:
Du vil have at din forløkke stopper ligeså snart at n<=stopKm?

Jeg ville, lave en metode som tjekker dette:



public boolean mayContinue()
{
    if(antalKm <= stopKm)
        return true;

        return false;
}



Så kan du så i dine while-løkker skrive ex.

while(antalKm >=25 && antalKm <=99 && mayContinue())

På denne måde tjekker hver wjile løkke om de stadig må køre i for-løkken, men der skal laves en del om i programmet. Det er ikke helt optimal kode, efter min spæde mening ;) Men ideen er go' nok.

Håber det ar det du mente...
Avatar billede jones279 Nybegynder
12. december 2004 - 17:10 #4
Ser smart ud jps - men nok lidt for avanceret!... Men Arnes virker sgu og det var faktisk lige præcis sådan jeg skulle bruge - Så tusind mange takker! Smid et svar :D
Avatar billede jps6kb Novice
12. december 2004 - 17:14 #5
Oki.. bare i orden...

men lige et fif:

      for(int n = antalKm; n<=stopKm; n++)

n++ forøger n med en, og så slipper du for spring-variablen ;)
Avatar billede arne_v Ekspert
12. december 2004 - 17:20 #6
svar
Avatar billede jones279 Nybegynder
12. december 2004 - 17:26 #7
Yeah! I know - grunden til at jeg har spring variablen er fordi, at i næste opgave skal den lave spring på 10...
Avatar billede jps6kb Novice
12. december 2004 - 17:27 #8
Ahh... smart :)
Avatar billede jones279 Nybegynder
12. december 2004 - 17:29 #9
Tark :)
Avatar billede jones279 Nybegynder
12. december 2004 - 17:55 #10
Hvad er forskellen på if og while egentligt ?? Hvis jeg lige kan nå at få svar med på det? :D
Avatar billede arne_v Ekspert
12. december 2004 - 18:00 #11
En if block udføres 0 eller 1 gang afhængig af om udtrykker er true eller false

En while løkke udføres 0..uendelig gange indtil udtrykket ikke længere er sandt
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