Gå til innhold

If / else problem i Java


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av RavnTM
Lenke til kommentar

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

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 av 13375k1133z
Lenke til kommentar

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. ;)

  • Liker 1
Lenke til kommentar

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

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

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

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

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"

  • Liker 2
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...