Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Maj 2009

är jag på rätt väg?

Håller på med ett program där man matar in antal arbetstimmar och timlön, och sen får fram veckolönen, MEN om arbetstiden under en v överskrider 40 tim, så får man övertidsersättning med 50% på den ordinarie timlönen för de överskjutande timmarna.

Att göra det första är inget större problem, men att få programmet att räkna med övertidsersättningen krånglade till det lite.

Detta är vad jag åstadkommit, och jag är relativt ny på detta, men om någon kan säga om jag är helt ute och cyklar, eller om jag har fattat någonting=)
Jag är absolut inte ute efter att få hela lösningen, bara lite tips på vägen!

import javax.swing.*; public class Pay { public static void main(String[] arg) { String s; s = JOptionPane.showInputDialog("Ange antal arbetstimmar:"); double a = Double.parseDouble(s); if (a <= 40) { //här avgörs det om man överskrider 40 tim s = JOptionPane.showInputDialog("Ange timlön"); double b = Double.parseDouble(s); double c = a*b; //räknar ut veckolönen } else if (a > 0 && a < 40) { JOptionPane.showMessageDialog(null, "Veckolönen är: " + c); } else { JOptionPane.showMessageDialog(null, "Veckolönen är: " + c)"+ 50% på den ordinarie timlönen"); } System.exit(0); } }

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

Re: är jag på rätt väg?

Citat:

Ursprungligen inskrivet av coka

if (a <= 40) { //här avgörs det om man överskrider 40 tim s = JOptionPane.showInputDialog("Ange timlön"); double b = Double.parseDouble(s); double c = a*b; //räknar ut veckolönen } else if (a > 0 && a < 40) { JOptionPane.showMessageDialog(null, "Veckolönen är: " + c); } else { JOptionPane.showMessageDialog(null, "Veckolönen är: " + c)"+ 50% på den ordinarie timlönen"); }

Observera att variabler som definieras mellan "{" och "}" endast finns mellan dessa; du kan därför till exempel inte använda "c" i annat än det första fallet. Vidare kommer man sällan hamna i det andra fallet då det har strängare krav än det första; de värden på a som inte accepteras av den första if-satsen (till exempel a = 41) tillåts inte heller av den andra.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2002

När antalet timmar är mer än 40 måste du ju först räkna ut vanliga timlönen på de 40 timmarna sen ta den överskjutande delen av timlönen och multiplicera med timlönen x 1.5 (50%) för att få den totala veckolönen för den veckan.

tex om du jobbar 45 timmar och drar in 100 kronor i timmen så måste ditt program först se att aha mer än 45... då tar vi 40 x 100 och sen är det ju 5 timmar som ska ha +50% så då tar du (45 - 40) x 100 x 1.5 så får du addera de 2 resultaten för totala veckolönen.. hoppas du förstår...

Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

Precis som de andra sa får du ta och köra om timmarna är under 40 ska du bara ta timmarna x timlön. Annars tar du (40 x timlön) + (timmar-40)(1,5timlön)

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Maj 2009

tror att jag förstår en aning, alltså själva uträkningen är inte det stora problemet, utan hur jag ska kunna skriva in olika svar, och få antingen svaret "veckolönen är:" eller "veckolönen är x + 50%" med andra ord hur jag ska använda if o else satsen på rätt sätt... (är dock väldigt tacksam för alla svar)!

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2002

Du kan ju skriva ut resultatet i samband med if-satserna:

tex

if timlön <= 40
veckolön = timlön x timmar
print veckolönen är veckolön

else if timlön > 40
veckolön = ( 40 x timmar ) + (( timmar - 40 ) x 1.5)
print veckolönen är veckolön med övertid

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Maj 2009

När jag försöker kompilera det första jag skrev får jag detta felmedd:

Pay.java:19: ';' expected JOptionPane.showMessageDialog(null, "Veckolönen är: " + c)"+ 50% på den ordinarie timlönen");

^
Den vill ha semikolon efter slutparentesen i "Veckolönen är: " + c)"

Förstår inte varför, och skulle programmet gå att köra om man bortser från det felet? (Även om uträkningen inte stämmer)
Bara undrar om jag fattat nånting=)

Min hjärna arbetar för fullt just nu!

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Aug 2008

Ush va dum jag känner mig när jag läser sånt här...

Ber om ursäkt för off topic men va bara tvungen....

Lian Li PC-Q28 :|: GTX 970 :|: Corsair TX650 :|: Corsair 16GB :|:MSI Z87i :|: i7 4770k :|: Evo Basic 250GB :|: Samsung 2493HM :|: CM Quickfire TK :|: Qpad 5K

Steam ID

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004
Citat:

Ursprungligen inskrivet av coka
När jag försöker kompilera det första jag skrev får jag detta felmedd:

Pay.java:19: ';' expected JOptionPane.showMessageDialog(null, "Veckolönen är: " + c)"+ 50% på den ordinarie timlönen");

^
Den vill ha semikolon efter slutparentesen i "Veckolönen är: " + c)"

Förstår inte varför, och skulle programmet gå att köra om man bortser från det felet? (Även om uträkningen inte stämmer)
Bara undrar om jag fattat nånting=)

Min hjärna arbetar för fullt just nu!

Vad tycker du borde hända? Till att börja med finns inte "c" på det stället (se mitt tidigare inlägg) och för det andra finns det ett antal felaktiga citationstecken och parenteser. Anropet (som du ju också har använt tidigare) ser ut så här:

JOptionPane.showMessageDialog(null, "text");

där "text" kan ersättas med något vettigare. Man kan dock inte lägga till fler citationstecken och parenteser hur som helst; det du förmodligen menar är:

JOptionPane.showMessageDialog(null, "Veckolönen är: " + c + "50% på den ordinarie timlönen");

Detta ger sannolikt inte vad du önskar, men det går nog att kompilera i alla fall...

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007

Tips 1: använd variabelnamn som talar för sig själva.

input = JOptionPane.showInputDialog("Ange antal arbetstimmar:"); double hours = Double.parseDouble(input);

Tips 2: fundera på hur många IF-satser du egentligen behöver. Vad är det du vill kontrollera? Som Elgot säger, tänk på att variabler i Java är scope-begränsade. Med andra ord kommer nedanstående inte att fungera, eftersom variabel foo är skapad inuti if-satsen men anropas efter att denna stängts:

if (bool == true) { int foo = 42; } System.out.println(foo);

Om du vill "ha med dig" ett värde ut ur en if-sats får du deklarera variabeln utanför satsen.

Tips 3: Indentera allting i en sats ett steg, även nästade satser (som if, for etc):

class Meaning { public Meaning(int foo) { if ((foo > 41) && (foo < 43)) { System.out.println(foo); } } }

Bilanaloger är som Volvo — varenda svenne kör med dem