Avatar billede viciodk Praktikant
07. marts 2004 - 16:24 Der er 6 kommentarer og
1 løsning

Intervaller i Java

Som bekendt giver Java ikke direkte adgang til at arbejde med intervaller. Hvordan kan man så nemmest løse følgende eksempel:

Jeg har en metode til beregning af pris:

public double beregnPris(int sider)
{
    double pris = ??????;
    return pris;
}


Lad os sige at:

Side  1-20 koster 5 kr.
Side 21-40 koster 4 kr.
Side 41-60 koster 3 kr.
Side 61- koster 0,5 kr.

Den samlede pris skal returneres.

Jeg kan godt lave det ved hjælp af en masse if-sætninger. Men det bliver da hurtigt tungt. Er det ikke muligt at bruge noget modulus-regning eller lignende? ;)
Avatar billede arne_v Ekspert
07. marts 2004 - 16:35 #1
Umiddelbart vil jeg sige at enten 1 "ægte" if per interval eller en
"uægte" if i form af ?: operatoren er de muligheder der er.
Avatar billede arne_v Ekspert
07. marts 2004 - 16:36 #2
Det passer vist ikke. Du bør vel også kunne bruge max. Det tror jeg er kønnest.
Avatar billede viciodk Praktikant
07. marts 2004 - 16:41 #3
Okay, det var da forholdsvis ærgerligt.

Hvad mener du med "max"? :)
Avatar billede arne_v Ekspert
07. marts 2004 - 16:48 #4
Hm. Det blev vist ikke så kønt alligevel.

Døm selv:

public class Calc {
    public static double beregnPris1(int sider) {
        return Math.min(sider, 20) * 5 +
              Math.min(Math.max(sider - 20, 0), 20) * 4 +
              Math.min(Math.max(sider - 40, 0), 20) * 3 +
              Math.max(sider - 60, 0) * 0.5;
    }
    public static double beregnPris2(int sider) {
        if (sider <= 20) {
            return sider * 5;
        } else if (sider <= 40) {
            return (sider - 20) * 4 + 20 * 5;
        } else if (sider <= 60) {
            return (sider - 40) * 3 + +20 * 4 + 20 * 5;
        } else {
            return (sider - 60) * 0.5 + 20 * 3 + 20 * 4 + 20 * 5;
        }
    }
    public static void main(String[] args) {
        System.out.println(beregnPris1(10) + " " + beregnPris1(10));
        System.out.println(beregnPris1(30) + " " + beregnPris2(30));
        System.out.println(beregnPris1(50) + " " + beregnPris2(50));
        System.out.println(beregnPris1(70) + " " + beregnPris2(70));
    }
}
Avatar billede viciodk Praktikant
07. marts 2004 - 17:09 #5
Efter at have gennemskuet hvordan Math.max() og Math.min() virker, synes jeg egentlig de er ret smarte her.

Du skal være velkommen til at lægge et svar.
Avatar billede arne_v Ekspert
07. marts 2004 - 17:20 #6
ok
Avatar billede viciodk Praktikant
07. marts 2004 - 17:22 #7
Tak for hjælpen :)
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