Avatar billede aniels21 Nybegynder
01. april 2003 - 11:38 Der er 6 kommentarer og
1 løsning

Prisberegningsmetode, en smule advanced ;-)

Hejsan,

efter ca. 15 timers jobben frem og tilbage med nedenstående metode er jeg desperat for hjælp...

Forklaring:
Metoden skal udregne hvad det koster at parkere i et p hus i x timer. Følgende gælder:

1. Det er gratis at være med på en "kigger", dvs køre ud  af p-huset inden for 10 minutter.

2. Hvis man bliver derinde koster første time 10 kr.

3. Efterfølgende timer koster 12 kr.

4. Det koster højst 70 kr pr døgn.

Nedenstående virker, pånær hvis parkeringstiden er flere døgn (48 timer virker sjovt nok)

public double beloeb() {
    long pris1 = 0;
    long minutter = getUdkoersel().minsAfter(getIndkoersel());
    double timer = minutter / 60.0;
    long minutterOverEnTime = minutter % 60;
    int tid = new Double(timer).intValue();
    if(tid<timer)tid=tid+1;

    //beregning af pris for en "kigger"
    if(minutter<=10){
        return 0.0;
    }
    //beregning af pris for en times parkering
    else if (minutter > 10 && minutter < 60) {//hvis pakering er mellem 10 og 60 minutter
        pris1 = administration.getFoersteTimepris();
    }
 
    // beregning af pris for holdetid under 6 timer
    else if (timer <= 6.0) {
        if (minutterOverEnTime == 0.0)
              pris1 = administration.getFoersteTimepris()
                    + ((tid) - 1) * (administration.getEfterfoelgendeTimepris());
                   
        else pris1 = administration.getFoersteTimepris()
                    + (tid) * administration.getEfterfoelgendeTimepris();
    }
   
    // beregning af pris for holdetid inden for et døgn
    else if (timer <= 24.0 && timer >= 6.0) {//hvis den er mere end 6, og mindre end 24 timer
        pris1 = administration.getMaksDagspris();
    }
   
    //holdetid svarer til hele døgn
    else if (timer % 24.0 == 0.0 && timer > 24.0) {
       
        pris1 = administration.getMaksDagspris() * (tid / 24);
    }
   
    //holdetid er mere end hele døgn
    else{
    long prisForHeleDøgn, prisForTimerEfter=0;
       
    //hele døgn * maks døgnpris
    prisForHeleDøgn = (tid/24)*administration.getMaksDagspris();
       
        if(minutter%1440!=0){//hvis holdetid er præcis x timer mere end et døgn
            //timer ud over et døgn * efterfølgende timepris
            prisForTimerEfter=(tid%24)*administration.getEfterfoelgendeTimepris();
        }
                   
        pris1=prisForHeleDøgn+prisForTimerEfter;
    }
    return pris1;
}

Ked af det lidt u-overskuelige setup, men jeg kunne ikke rette det til..
Avatar billede aniels21 Nybegynder
01. april 2003 - 11:40 #1
Spørg endeligt hvis der er noget at vær i tvivl om, jeg har lidt mistet overblikket over det efterhånden...
Avatar billede disky Nybegynder
01. april 2003 - 11:57 #2
hvad er prisen for 34 timer

er det 70 kroner for første døgn + 10 timer af 12 kroner, eller er det 140 kroner ?
Avatar billede disky Nybegynder
01. april 2003 - 12:00 #3
hvis det efter dag 1 koster 70 kroner per begyndt dag skulle følgende virker:


/**
* Created by IntelliJ IDEA.
* User: Søren Reinke
* Date: Apr 1, 2003
* Time: 11:48:15 AM
* To change this template use Options | File Templates.
*/
public class Parkering
{
    public  Parkering()
    {
        System.out.println("pris for  7 min = "+beregnPris(7));
        System.out.println("pris for 14 min = "+beregnPris(14));
        System.out.println("pris for 65 min = "+beregnPris(65));
        System.out.println("pris for 10 timer = "+beregnPris(10*60));
        System.out.println("pris for 34 timer = "+beregnPris(34*60));
        System.out.println("pris for 7 dage = "+beregnPris(7*24*60));
    }

    private int beregnPris(int min)
    {
        if(min<=10) return 0;
        else if(min>10 && min<60) return 10;
        else if(min>=60 && min<60*24)
        {
            int pris=10;
            int timer=min/60;
            pris+=timer*12;
            if(pris>70) pris=70;
            return pris;
        }
        else if(min>60*24)
        {
            int dage=(min/60)/24+1;
            return dage*70;
        }

        return -1;
    }

    public static void main(String[] args)
    {
        new Parkering();
    }
}
Avatar billede arne_v Ekspert
01. april 2003 - 12:20 #4
Der skal lige laves lidt små rettelser i den kode:

public class Parkering {
    public Parkering() {
        System.out.println("pris for  7 min = " + beregnPris(7));
        System.out.println("pris for 14 min = " + beregnPris(14));
        System.out.println("pris for 65 min = " + beregnPris(65));
        System.out.println("pris for 120 min = " + beregnPris(120));
        System.out.println("pris for 121 min = " + beregnPris(121));
        System.out.println("pris for 10 timer = " + beregnPris(10 * 60));
        System.out.println("pris for 24 timer = " + beregnPris(24 * 60));
        System.out.println("pris for 34 timer = " + beregnPris(34 * 60));
        System.out.println("pris for 7 dage = " + beregnPris(7 * 24 * 60));
    }

    private int beregnPris(int min) {
        if (min <= 10)
            return 0;
        else if (min > 10 && min < 60)
            return 10;
        else if (min >= 60 && min < 60 * 24) {
            int pris = 10;
            int timer = (min - 1) / 60; //  <----
            pris += timer * 12;
            if (pris > 70)
                pris = 70;
            return pris;
        } else if (min >= 60 * 24) {  //  <----
            int dage = (min - 1) / (60 * 24) + 1;    //  <----
            return dage * 70;
        }

        return -1;
    }

    public static void main(String[] args) {
        new Parkering();
    }
}
Avatar billede disky Nybegynder
01. april 2003 - 12:22 #5
yep det har du ret i :-)
Avatar billede aniels21 Nybegynder
01. april 2003 - 13:23 #6
prisen er 10 kr for første time, 12 kroner for de efterfølgende timer, dog maks 70 kr i døgnet. Dvs. man kommer højst til at betale for 6 timer (1*10+5*12). P-huset har åben fra kl 7-22 (hvilket der ikke er taget højde for, men det skulle vel ikke betyde noget umiddelbart i denne metode).

Altså pris for 34 timer 70 + 70 = 140.
Avatar billede disky Nybegynder
01. april 2003 - 13:31 #7
så skulle ovenstående være ok
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