13375k1133z Skrevet 8. september 2010 Del Skrevet 8. september 2010 Har litt problem med en kode jeg har skrevet, den skal regne ut prisen på noe med og uten rabatt. Først skal du taste inn hvor mange kilo du vil ha av gjenstanden, deretter 1 eller 0 - 1 representerer 20kr pr kg og 0 er 25.5kr pr kg. Problemet med koden er at når jeg taster inn antall kilo og hvilke rabattklasse det skal bli regnet i (1 eller 0) regner programmet bare ut på rabattklasse 1. altså tar utgangspunkt i at prisen bare er 20.- Regner med at jeg har skrevet noe gale i if / else, men finner ikke ut hva problemet er. Hadde vært flott om noen kunne hjulpet meg. på forhånd takk. Kildekoden: import java.util.Scanner; class te { public static void main (String[]args){ Scanner tastatur = new Scanner (System.in); System.out.print("Hvor mye skal kjøpes?"); double kg; double kunde; double pris; kg = tastatur.nextDouble(); // er det som blir registrert skrevet inn på tastaturet. System.out.print("Er kunden fast kunde? Tast 1 for ja og 0 for nei."); kunde = tastatur.nextDouble(); //leser inn om kunden er fast eller ei. if (kunde != 0) pris = 25.5 * kg; else if (kunde != 1); pris = 20.0 * kg; System.out.printf( + kg + " kg te selges for " + pris + " kr" ); } } Lenke til kommentar
RavnTM Skrevet 8. september 2010 Del Skrevet 8. september 2010 Du har et semikolon for mye her: else if (kunde != 1); pris = 20.0 * kg; Skrevet på en annen måte, blir det: if (kunde != 0) pris = 25.5 * kg; else if (kunde != 1) ; pris = 20.0 * kg; Noe som gjør at pris alltid blir satt til 20.0 * kg. :-) Lenke til kommentar
13375k1133z Skrevet 8. september 2010 Forfatter Del Skrevet 8. september 2010 Takker. No får jeg feilmelding etter å ha fjernet semikolon: else if (kunde != 1) pris = 20.0 * kg; variable pris might not have been initialized Lenke til kommentar
RavnTM Skrevet 8. september 2010 Del Skrevet 8. september 2010 (endret) Det er fordi brukeren kan taste inn tall som ikke er 1 eller 0. Hvis brukeren skriver 1, får pris verdien "25.5 * kg", og hvis brukeren skriver 0, får den "20.0 * kg", men hvis brukeren skriver noe annet, som for eksempel 3, får aldri pris noen verdi. Du kan rette opp problemet med en else-blokk som setter pris til noen annet, eventuelt gi en feilmelding. Edit: Uff, gikk litt fort der. :-) Edit 2: Haha, jeg la faktisk ikke merke til de logiske feilene som quantum nevner, men løsningen min burde fortsatt fungere. Endret 8. september 2010 av RavnTM Lenke til kommentar
quantum Skrevet 8. september 2010 Del Skrevet 8. september 2010 rent bortsett fra det surret med semikolon har du jo kodet det motsatte av det du ønsker. du skriver «1 representerer 20kr pr kg og 0 er 25.5kr pr kg» og så koder du (har tatt vekk semikolonet) if (kunde != 0) pris = 25.5 * kg; else if (kunde != 1) pris = 20.0 * kg; altså, du vil at prisen er 20/kg når det tastes 1 og 25.5/kg når det tastes 0. men det du har kodet er at prisen blir 25.5/kg for alt annet enn 0 og 1, og 20.0/kg for 0. du må bruke likhetsoperatoren ==, ikke ulikhet !=. Lenke til kommentar
13375k1133z Skrevet 8. september 2010 Forfatter Del Skrevet 8. september 2010 (endret) Takker for hjelpen. Var litt usikker med ulikhetene, prøvde først ==, når det ikke funket !=. prøvde å sette inn en ny if setning, som automatisk setter verdien til den høyeste prisen dersom det tastes inn over 1. import java.util.Scanner; class te { public static void main (String[]args){ Scanner tastatur = new Scanner (System.in); System.out.print("Hvor mye skal kjøpes?"); double kg; double kunde; double pris; kg = tastatur.nextDouble(); // er det som blir registrert skrevet inn på tastaturet. System.out.print("Er kunden fast kunde? Tast 1 for ja og 0 for nei."); kunde = tastatur.nextDouble(); //leser inn om kunden er fast eller ei. if (kunde == 0) pris = 25.5 * kg; else if(kunde == 1) pris = 20.0 * kg; else ( kunde > 1) pris = 25.5 * kg; System.out.printf( + kg + " kg te selges for " + pris + " kr" ); } } No får jeg error: Not a statement på linje 22 og ; expected hva er årsaken til detTe? Endret 8. september 2010 av 13375k1133z Lenke til kommentar
RavnTM Skrevet 8. september 2010 Del Skrevet 8. september 2010 Du trenger ikke "( kunde > 1)", else-blokken kjøres om ingen av de andre valgene treffer, altså om kunde ikke er 1 eller 0. if (kunde == 0) // Kunde er lik 0 pris = 25.5 * kg; else if (kunde == 1) // Kunde er lik 1 pris = 20.0 * kg; else // Kunde er lik noe annet pris = 25.5 * kg; Hvis du vil at blokken bare skal kjøres om kunde er større enn 1, kan du legge til en ekstra if-else-blokk, else if (kunde == 1) ... else if (kunde > 1) ... men da mangler pris en verdi når kunde ikke er 0, 1 eller større enn 1. 1 Lenke til kommentar
13375k1133z Skrevet 8. september 2010 Forfatter Del Skrevet 8. september 2010 Tusen hjertelig takk for hjelpen! Lenke til kommentar
PerB Skrevet 9. september 2010 Del Skrevet 9. september 2010 Eller: pris = 25.5 * kg; if (kunde == 1) // Kunde er lik 1 pris = 20.0 * kg; Lenke til kommentar
13375k1133z Skrevet 9. september 2010 Forfatter Del Skrevet 9. september 2010 Hei igjen. Bestemte meg at det skulle komme en feilmelding dersom noen skrev inn en verdi som er høyere en 1. Her er koden: if (kunde == 0) pris = 25.5 * kg; else if (kunde == 1) pris = 20.0 * kg; else System.out.print(+kunde+ "er en ugyldig verdi"); Erroren jeg får er: Variable pris might not have been initialized. Har prøvd å fikse problemet uten hell. Noen input? Lenke til kommentar
Unlimited LTD Skrevet 9. september 2010 Del Skrevet 9. september 2010 Du må nok poste mer enn bare dette. Feilen er at du prøver å gjøre noe med pris lengre ned i koden, men siden det er en mulighet for at pris variabelen ikke er satt får du en compiler feil. Forskjellen her er at før så ble prisen satt uansett hvilken if blokk du gikk i. Nå har du plutselig en if blokk der pris variabelen ikke blir satt. Lenke til kommentar
Endors Skrevet 9. september 2010 Del Skrevet 9. september 2010 Der du oppretter pris variablen: double pris; Endre dette til: double pris = 0; Da vil du løse problemet med initialisering av variabelen. Lenke til kommentar
13375k1133z Skrevet 9. september 2010 Forfatter Del Skrevet 9. september 2010 Takker. Ser ut til at jeg har litt dårlige programmeringsvaner, det er bare å rette opp i dem før det er for seint. problemet jeg har no er at "error" teksten skrives ut og: System.out.printf( + kg + " kg te selges for " + pris + " kr" ); Hvordan hindrer jeg at: System.out.printf( + kg + " kg te selges for " + pris + " kr" ); skrives ut, dersom inntastet tall er større en 1? Lenke til kommentar
13375k1133z Skrevet 9. september 2010 Forfatter Del Skrevet 9. september 2010 Når jeg sier error tekst, mener jeg teksten som blir skrevet ut når du taster inn en ugyldig verdi, i dette tilfellet tall over 1. Altså de to siste setningene i denne koden skrives ut: if (kunde == 0) pris = 25.5 * kg; else if (kunde == 1) pris = 20.0 * kg; else if (kunde > 1) System.out.print("lol"); System.out.printf( + kg + " kg te selges for " + pris + " kr" ); bare System.out.print (") skal skrive dersom de har oppgitt ugyldig verdi ( >1) dersom de skriver under 1 (<1) skal system.out.print(+ kg + "kg te selges for " + pris + " kr"); Lenke til kommentar
Mr.TC Skrevet 9. september 2010 Del Skrevet 9. september 2010 Et par tips til koden din. double kg; double kunde; double pris; Alle variabler bør alltid alltid settes til en default verdi når du deklarerer de. I tillegg bør du tenke på hvilke verdier variabelen kommer til å ha. Iforhold til hva du skriver om koden vil aldri kunde ha noen annen verdi enn heltall. Derfor bør du heller bruke integer. double kg = 0.0; double pris = 0.0; int kunde = 0; double fastKunde = 20.0; double ikkeFast = 25.5; kunde = tastatur.nextDouble(); Må da også forandres til: kunde = tastatur.nextInt(); Videre kan du forenkle if-else blokken din som nevnt før. Det er heller ingen grunn til å bruke System.out.printf med mindre du faktisk skal formatere noe i teksten. Har laget et forslag på hvordan if-blokken din kunne sett ut: if(kunde > 0){ pris = fastKunde * kg; System.out.println(kg + " kg te selges for " + pris + " kr"); }else if(kunde == 0){ pris = ikkeFast * kg; System.out.println(kg + " kg te selges for " + pris + " kr"); }else System.out.println(kunde + " er en ugyldig verdi" 2 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå