Problem med Scanner
Hej. Jag har så smått börjat med java och är alltså nybörjare som har en fråga. Jag har börjat med en kod som ska räkna ut hur mycket jag tjänar på dag X, koden som jag har skrivit finner ni nedan. När jag kör den hänger inte det matematiska med när jag vill räkna ut hur mycket pengar jag har tjänat på dag Y. När jag kör koden och skriver in att jag kom till jobbet 08:15 får jag följande output. Jag får alltså inte möjlighet att skriva när jag lämnade jobbet och summan på 206 kr är fel då timlönen är 100 kr.
Skriv in när du började jobba idag [hh:mm]>08:15
Skriv in när du slutade jobba idag [hh:mm]>Din lön för idag blir 205.83333333333331Kr
Kan någon med större kunskaper än mig förklara varför resultatet blir som det blir?
-----------------------------------------------------------------------------------
import java.util.*;
public class Tid
{
public static void main(String[] args)
{
int hours;
double minutes, totalhours;
double lon=0;
int pengar=100;
Scanner keyboard = new Scanner(System.in).useDelimiter(":|\s*");
System.out.print("Skriv in när du kom till jobbet idag [hh:mm]>");
int ankomst = keyboard.nextInt();
System.out.print("Skriv in när du lämnade jobbet idag [hh:mm]>");
int slut = keyboard.nextInt();
hours = keyboard.nextInt();
minutes = keyboard.nextDouble();
totalhours = hours + (minutes/60);
lon = totalhours*pengar;
System.out.println("Din lön för dagen är " + lon + "Kr");
}
}
Du ska läsa både timme och minut från den första inputen. Du läser bara timmen.
I mönstret ska du skriva \\s* om du menar godtyckligt antal blanka. Men vad jag ser används inte blanka som avskiljare utan kolon och ny rad. Jag föreslår att du tar bort |\s* ur mönstret ochi stället gör keyboard.nextLine() när du läst timme och minut.
Tack för ditt svar Henrik. Jag förstår dock inte riktigt vad du menar när du skriver att jag bara läser in timmen?
Du måste väl ta tiden du slutar - tiden du kommer för att få fram den totala tiden du är på jobbet?
Ex: Kommer du 10.00 och går 18.00 måste det finnas någon punkt i koden där du tar 18.00-10.00 för att få fram en totalhours på 8 timmar. Den skall sedan tas * 100 som är lönen, vilket kodens sista rad visar.
Det din kod verkar göra (jag är C++ och inte Java, ursäkta om jag har fel) är att istället ta fram
totalhours = hours + (minutes/60);
Men du har bara timmar och minuter från det ena värdet, inte det andra.
Du skriver 08:15 och läser in 08 till ankomst men du läser inte in 15.
är det int hours som gör att endast timmar läses in?
Läsa in från tangentbord kan vara knepigt. Börja istället att definiera några testvärden direkt i programmet och kör det för att verifiera att matematiken fungerar. Sedan tar du dig an att läsa siffror från tangentbordet.
Dessutom läser du in variablerna ankomst och slut, men du använder dem inte.
Byt ut hours = keyboard.nextInt(); osv mot
hours = 8;
minutes = 45;
Kör sedan uträkningen:
totalhours = hours + (minutes/60);
lon = totalhours*pengar;
System.out.println("Din lön för dagen är " + lon + "Kr");
Prova med lite olika värden på hours och minutes.
När du är nöjd med resultatet börjar du med tangentbordsinmatningen. Henrik hade några bra tips där.
Samma problem här
MagicJulia skrev :Samma problem här
MagicJulia, vad exakt är det du inte förstår? Hur ser din kod ut? Vad är det du inte förstår i hjälpen och hintarna som Henrik, Ingemar och PeterÅ gav till narkingen? Var fastnar du? Med mer info kan vi hjälpa dig bättre.
Posta gärna som ny fråga ifall ditt problem är annorlunda mot narkingens.