2009-08-01, 20:31
  #1
Medlem
gjorde en liten lösning på ett problem. den räknar ut ens lön, både brutto/netto årsinkomst osv osv.
Frågan är den. Duger den? vad kan göras bättre för att få ner kod mängden?
Och är det någon som kan vara vänlig och förklara mer ingående vad :
[PHP]static final double SKATT = 0.34;//fast skattvärde.[/PHP]
är för något. Och kan man inte ta fram ett skattvärde på ett annat sätt?
tacksam för svar.

så här ser lösningen ut:
[PHP]import java.util.*;

public class Paycheck{

static final double SKATT = 0.34;//fast skattvärde.

public static void main (String[] args){

Scanner in = new Scanner(System.in);

System.out.println("enter your salery : ");
double loning = in.nextDouble();


double skillnad = SKATT * loning;
double total = loning - skillnad;
double dag = loning / 160;
double dag2 = total / 160;
double årsinkomst = loning * 12;
double taxfree = total * 12;

System.out.println("------------------------------------------");
System.out.println("monthly salary before taxes : " + loning);
System.out.println("salery per day : " + dag);
System.out.println("------------------------------------------");
System.out.println("monthly salary after taxes : " + total);
System.out.println("taxfree salery per day : " + dag2);
System.out.println("------------------------------------------");
System.out.println("total year income before tax : " + årsinkomst);
System.out.println("total year income after tax : " + taxfree);
System.out.println("------------------------------------------");
}
}
[/PHP]
Citera
2009-08-02, 10:32
  #2
Medlem
Den fungerar väl bra. Det enda som är fel är väl hur du räknar ut dagslönen. Om månadslönen läses in till loning så kan ju inte dagslönen vara lika med loning/160. Timlönen kan möjligtvis vara lika med det om man förutsätter att alla månader har 4 veckor och 40 timmar/h.
Citera
2009-08-02, 14:27
  #3
Medlem
Protons avatar
[PHP]
static final double SKATT = 0.34;//fast skattvärde.
[/PHP]
Är en klassvariabel av typen double som dessutom är en konstant.

Meningen med att använda en sådan är att du på ett enkelt sätt ska kunna ändra skattesatsen på ALLA ställen du använder en sådan i din kod.

I det här fallet är det vad jag ser bara ett ställe den används på, men hade det varit en lång kod och du använt beräkningen på 100 olika ställen, och du eventuellt hade velat ha en skattsats deklarerad på något ställe så att andra klasser skulle kunna använda den med(genom att göra den protected eller public) så blir det genast mycket enklare för alla inblandade att göra såhär. Du kan ju själv föreställa dej vilken mindre spännande uppgift det hade varit att leta igenhom en kod efter ETT ställe där man glömt att ändra sin skattesats, iaf om den innehåller 100 utspridda beräkningar med densamma. En fördel till: Hur ändrar du din skattesats om du skule vilja?

Hade du inte använt konstanten så hade du varit tvungen att leta upp alla ställen i koden och ändra där = stor risk för att glöma ett ställe. I det här fallet ändrar du bara i konstanten så är det klart och du vet att det komnmer att funka överallt.
Citera
2009-08-02, 18:44
  #4
Medlem
Tooners avatar
Citat:
Ursprungligen postat av MindControll
Och är det någon som kan vara vänlig och förklara mer ingående vad :
[PHP]static final double SKATT = 0.34;//fast skattvärde.[/PHP]
är för något.

static: klassen behöver inte instansieras för att variabeln ska kommas åt

final: variabeln kan bara tilldelas ett värde en gång, antingen direkt som du gjort här eller vid körning, om värdet försöker ändras någon mer gång i koden kommer det bli kompileringsfel

Som Proton sa används sådana variabler till värden man använder på flera ställen i koden och lätt vill kunna ändra på.

Detta går naturligtvis att göra med en vanlig variabel. En fördel med "final" är att det inte går att råka ändra den någonstans i koden, vilket faktiskt är lätt hänt när projekten börjar bli större. En annan fördel är att koden mycket lättare kan optimeras av kompilatorn om alla kända värden är satta till "final". Kompilatorn behöver då inte oroa sig för att värdet ska ändras senare utan kan hårdkoda värdet direkt på alla ställen det används.
Citera
2009-08-05, 17:55
  #5
Medlem
Citat:
Ursprungligen postat av KanelKakan
Den fungerar väl bra. Det enda som är fel är väl hur du räknar ut dagslönen. Om månadslönen läses in till loning så kan ju inte dagslönen vara lika med loning/160. Timlönen kan möjligtvis vara lika med det om man förutsätter att alla månader har 4 veckor och 40 timmar/h.
¨
sant spg min enorma miss där. det ser mer ut som en timmlön istäle för en dags lön (pinsamt) skall åtgärda det
Citera
2009-08-05, 18:24
  #6
Medlem
Tackar alla för en bra förklaring! kommer antagligen lägga ut mer kod exempel här så ni får mer än gärna kika in dem.

Tycker även fler kan delta med att använda denna tråd till ny börjar respons.
Citera
2009-08-05, 19:39
  #7
Medlem
kvints avatar
Jag tycker personligen det är ganska töntigt med svenska variabelnamn, men det är ju en smaksak...
Citera
2009-08-05, 20:14
  #8
Medlem
Citat:
Ursprungligen postat av kvint
Jag tycker personligen det är ganska töntigt med svenska variabelnamn, men det är ju en smaksak...

håler med dig fullständigt! men nu vart det ju som det vart
Citera
2009-08-06, 00:35
  #9
Medlem
truperts avatar
Citat:
Ursprungligen postat av MindControll
Tycker även fler kan delta med att använda denna tråd till ny börjar respons.

Jag ger det ett försök!

[PHP]import java.util.Scanner;

public class BMI {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);

System.out.println("Ange din vikt i kilogram: ");
int weight = scan.nextInt();
System.out.println("Ange din längd i meter: ");
double length = scan.nextDouble();
double bmi = weight / (length * length);
System.out.println("Ditt BMI är: " + bmi);

if (bmi < 19)
System.out.println("Du är underviktig!");
else if ((bmi >= 19) && (bmi < 26))
System.out.println("Du är idealviktig!");
else if ((bmi >= 26) && (bmi < 30))
System.out.println("Du är överviktig!");
else
System.out.println("Du lider av fetma!");
}
}
[/PHP]

Det jag främst undrar över är
[PHP]((bmi >= 19) && (bmi < 26))[/PHP]
Varför kan man inte bara skriva
[PHP](bmi >= 19 && < 26)[/PHP]
Citera
2009-08-06, 00:55
  #10
Medlem
Protons avatar
Det är fullkomligt logiskt varför det inte går att skriva så. "mindre än" och "större än" är likt "lika med" en jämförelseoperator. En jämförelse kräver en operand på vardera sidan av operatorn för att kunna jämföras. Jämförelseoperander av det här slaget sägs vara binära då de alltså kräver 2 operander, till skillnad från "++" (som i forloopens i++) som är en unär operator.

Tänk efter själv. Villkoret kan endast besvaras med två svar: Sant eller falskt.

"mindre än 26" finns det ju ingen mening i. Däremot finns det betydligt mer mening i villkoret "bmi är mindre än 26". Dessutom kan det ju mycket väl vara så att du i andra fall vill ha 2 helt skilda jämförelser gjorda i samma if-sats. För en människa som kan dra logiska slutsatser om villkoret kan det ju funka, men det kan inte en kompilator, för den måste det bara finnas en och enfdast en betydelse av villkoret, annars går det ju inte att varken kompilera eller eventuellt optimera koden.
Citera
2009-08-06, 22:42
  #11
Medlem
Jag undrar en liten sak.
vad äre för skillnad på :

scan.next();

och

in.next();

EDIT:

Undrar även hur man minskar ner decimalerna på ett double värde.
__________________
Senast redigerad av MindControll 2009-08-06 kl. 23:02.
Citera
2009-08-06, 23:17
  #12
Medlem
Protons avatar
Beror ju helt och hållet på vad scan och in är för typer.

Är det Scanner du avser här eller vad? och in.next()? Vad är det för egenuppfunnet språk som innnehåller det?

I vilket fall som helst så BÖR du lära dej snarast att använda javadocen, och då främst den som finns över språket java.

http://java.sun.com/javase/6/docs/api/

För att svara på din andra fråga, för jag antar att du har googlat själv?

http://www.wellho.net/solutions/java-formatting-to-a-fixed-number-of-decimal-places.html
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in