Avatar billede galan Nybegynder
23. marts 2003 - 16:40 Der er 19 kommentarer og
3 løsninger

Hjælp, kan ik finde ud af at får det til at virke...

Hej, jeg er ikke den store programmør, men har dog alligevel vovet mig ud i at forsøge at lave nogle små programmer...

I det her program har jeg valgt at jeg skal kunne taste et antal kilometer ind fra tasteturet og så skal den selv regne ud hvad jeg kan trække fra i fradrag når jeg kører fra hjemmet til arbejdet... Men jeg har nok valgt forkerte løsninger for kan ik kobinere det så det virker... Nogen der kan hjælpe `?

Her er koden:

public class fradrag2
{

  static double km = 0;
  static double fradrag = 0;

  public static void main( String args[])
  {
      hastighedsgennemsnit();
  }

  private static void hastighedsgennemsnit()
  {
      int km;
      double fradrag;
      km = 0;
      fradrag = 0;
     
      ConsoleReader indles = new ConsoleReader( System. in);
      System.out.print("Indtast kilometer for denne tur,og 0 for afslut");

       
km = indles.readInt();

        while( km != 0)
        {
        beregn(antalKm);
        System.out.print("Indtast kilometer for denne tur,og 0 for afslut");
        km = indles.readInt();
      }
  }

 

  public double beregn(int antalKm)
{
km = antalKm;

if (km <= 24)
fradrag = 0;
System.out.println("Fradrag for " + km + " :" + fradrag);
else if (km <= 100)
fradrag = ((km-24) * 1.54);
System.out.println("Fradrag for " + km + " :" + fradrag);
else if (km > 100)
fradrag = ((km-24) * 1.54) + ((km-100) * 0.77);
System.out.println("Fradrag for " + km + " :" + fradrag);

}
}
Avatar billede datamatikeren Nybegynder
23. marts 2003 - 16:44 #1
Hvad er det lige nøjagtigt der ikke virker?
Avatar billede abpdk Nybegynder
23. marts 2003 - 17:03 #2
Prøv med dette:

import java.io.*;

public class fradrag2 {

    public static void main( String args[]) {
    hastighedsgennemsnit();
    }

    private static void hastighedsgennemsnit() {
    int km;
     
    BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
        try {
            System.out.print("Indtast kilometer for denne tur,og 0 for afslut: ");
            km = new Integer(keyboard.readLine()).intValue();

            if (km != 0)
            beregn(km);
            else
            break;
        } catch (IOException e) { System.out.println("Der skete en fejl!");  }
        }
    }

    public static void beregn(int antalKm) {
    double fradrag;

    if (antalKm <= 24) {
        fradrag = 0;
        System.out.println("Fradrag for " + antalKm + ": " + fradrag);
    } else if (antalKm <= 100) {
        fradrag = ((antalKm-24) * 1.54);
        System.out.println("Fradrag for " + antalKm + ": " + fradrag);
    } else if (antalKm > 100) {
        fradrag = ((antalKm-24) * 1.54) + ((antalKm-100) * 0.77);
        System.out.println("Fradrag for " + antalKm + ": " + fradrag);
    }
    }
}
Avatar billede arne_v Ekspert
23. marts 2003 - 17:45 #3
Jeg ville nok vende det som:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Fradrag2 {
    public static void main(String args[]) {
        process();
    }

    private static void process() {
        try {
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));

            System.out.print("Indtast kilometer for denne tur,og 0 for afslut");
            for (;;) {
                int km = Integer.parseInt(keyboard.readLine());
                if (km == 0) break;
                System.out.println("Fradrag for " + km + " :" + beregn(km));

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static double beregn(int km) {
        if (km <= 24) {
            return 0.0;
        } else if (km <= 100) {
            return ((km - 24) * 1.54);
        } else if (km > 100) {
            return ((km - 24) * 1.54) + ((km - 100) * 0.77);
        }
        return 0.0;
    }
}
Avatar billede abpdk Nybegynder
23. marts 2003 - 17:50 #4
arne_v>> Af ren og skær nysgerrighed, hvorfor?
Avatar billede arne_v Ekspert
23. marts 2003 - 17:57 #5
En beregn som returnerer en værdi er mere genanvendelig end
end en beregn som skriver ud til System.out !
Avatar billede arne_v Ekspert
23. marts 2003 - 17:58 #6
Men ellers er det kun småting der adskiller min løsning fra din.
Avatar billede abpdk Nybegynder
23. marts 2003 - 18:04 #7
Helt enig, jeg gik bare ud fra at det var en fejl med alle de System.out's så jeg brugte void istedet. Jeg kan dog ikke li'/forstå din brug af for(;;) frem for while (true). Jeg mener det er bedste kun at bruge for-løkker når man kender intervallet der gennemløbes.
Avatar billede arne_v Ekspert
23. marts 2003 - 18:12 #8
for(;;) har præcis samme funktionalitet som while(true).
Avatar billede abpdk Nybegynder
23. marts 2003 - 18:16 #9
netop!? ;)
Avatar billede disky Nybegynder
23. marts 2003 - 19:25 #10
men while(true) er pænere, og hurtigere at læse.
Avatar billede arne_v Ekspert
23. marts 2003 - 19:50 #11
disky>

Det var dog en ret tåbelig udtalelse.

Du synes at while(true) er pænere og hurtigere at læse.

Det er der millioner af andre programmører som også synes.

Der er imidlertid også millioner af programmører der synes at
for(;;) er pænere at læse.

Faktisk har C programmørerne diskuteret den sag i mere end 30 år.
Avatar billede disky Nybegynder
23. marts 2003 - 19:52 #12
Tja jeg ved bare når jeg underviser i C/C++/Java at folk har nemmere ved at forstå
while(true)
frem for din udgave.

Men som sædvanligt er du da velkommen til at bruge din egen udgave, i don't care.
Avatar billede abpdk Nybegynder
23. marts 2003 - 20:08 #13
Jeg tænkte nu ikke lige så meget på hvordan det så ud, men mere på princippet i at bruge en while-løkke til (potentielt) uendelige gennemløb, og en for-løkke til gennemløb med kendte "dimensioner".
Avatar billede disky Nybegynder
23. marts 2003 - 20:21 #14
Enig :)
Avatar billede arne_v Ekspert
23. marts 2003 - 21:05 #15
Den form for for-løkke der er i sprog af Pascal familien er til
kendt antal gennemløb.

Sprog i C familen har fået en mere generel for-løkke. Den er ikke
kun tiltænkt situationer med kendt antal gennemløb. Test expression
behøver ikke engang involvere nogle variable fra forInit eller
forUpdate delen.

Personligt kan jeg faktisk bedre lide Pascal varianten kombineret
med "den fjerde løkke-type" som kendt fra Modula-2 til mere
generelle løkker.

Men som bekendt har markedet bestemt at det ikke skulle være
sådan.
Avatar billede galan Nybegynder
24. marts 2003 - 12:30 #16
Ja det ser ud som om at det virker meget godt, men problemet er at jeg ikke forståer meget af de komandoer i har brugt. Nogen der kan forklarer en begynder hvad de forskellige komandoer som er brugt gør og hvad de betyder som enhed og for selve programmet... Ellers tak for hjælpen :)
Avatar billede disky Nybegynder
24. marts 2003 - 12:32 #17
hvilke kommandoer snakker du om, er det selve java syntaxen, eller api kaldene ?
Avatar billede galan Nybegynder
24. marts 2003 - 12:56 #18
hehe er ked af at indrømme det men det er nok hele koden i det hele tager. Det jeg selv har lavet kan jeg forstå nogenlunde, men hvorfor og hvordan de komandoer som i er smidt ind for at det hele virker kan jeg ikke finde ud af..
Avatar billede disky Nybegynder
24. marts 2003 - 12:58 #19
Jeg tror du vil få stor glæde af at læse:
www.javabog.dk
Enten på nettet eller købe bogen, det er et kursus i java programmering, som efter sigende skulle være ret godt, og det er skrevet på dansk.
Avatar billede galan Nybegynder
24. marts 2003 - 13:29 #20
Ja har bestilt bogen, men problemet ligger i at jeg deltager i et kursus hvor vi af og til skal aflevere et program alt efter hvor langt vi er kommet, så jeg skal helst kunne redegøre for hvad der står. Jeg forsøgte selv at lave det men løb hurtigt ind i problemer. :)
Avatar billede disky Nybegynder
24. marts 2003 - 14:30 #21
jeg vil gerne hjælpe med specifikke spørgsmål, men jeg har desværre ikke tid til mere dybdegående gennemgang af koden.
Avatar billede arne_v Ekspert
24. marts 2003 - 16:11 #22
Hvis jeg skal kommentere min egen version:

    private static void process() {
        try {
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in)); // lav et objekt der har en readLine metode

            System.out.print("Indtast kilometer for denne tur,og 0 for afslut");  // prompt fro input
            for (;;) { // løkke der kun terminerer med break
                int km = Integer.parseInt(keyboard.readLine()); // læs linie og konverter til int
                if (km == 0) break; // hop ud af løkken hvis km=0
                System.out.println("Fradrag for " + km + " :" + beregn(km)); // udskriv fradrag

            } // slut løkke
        } catch (IOException e) {
            e.printStackTrace(); // udskriv stack trace hvis der opstår en IO fejl
        }
    }

Nedenstående burde være rimeligt klart (ligne rogså dit meget):

    public static double beregn(int km) {
        if (km <= 24) {
            return 0.0;
        } else if (km <= 100) {
            return ((km - 24) * 1.54);
        } else if (km > 100) {
            return ((km - 24) * 1.54) + ((km - 100) * 0.77);
        }
        return 0.0;
    }
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