Aviseringar
Rensa alla

Förbannade Java...


Åtta
Ämnesstartare

Jag håller på med en Java-uppgift, men kan inte få ett en loop att fungera riktigt som jag vill.

Uppgiften lyder: "Vid köp av kopieringskort ska användaren mata in det antal kopior som kortet skall innehålla. Priset varierar beroende på hur många kopior man köper. Max 20 st kostar 1,50 kr/st, 21 - 50 st kostar 1 kr/st och fler än 50 kostar 85 öre."

För att undvika att användaren skriver in "bajs" och krashar programmet så använder jag try-catch för att fånga InputMismatchException, detta fungerar under första iterationen, men sedan avslutas programmet även om användaren anger att den vill försöka igen. Koden är tämligen enkel, så läs den och provkör programmet så ser ni vad jag menar.

import java.io.*;
import java.util.*;
public class Card {

public static void main (String args[]) throws IOException {
char newCard = 'n';
int copies = 0;
double price = 0;
boolean error = false;
java.util.Scanner input = new java.util.Scanner (System.in);

do {
newCard = 'n';
System.out.println("Antal kopior");
try {
copies = input.nextInt();
}
catch (InputMismatchException ime) {
System.out.println("Det är inte ett giltigt antal kopior. Var god ange antal i heltalsform
");
error = true;
}

if (!error) {
if (copies <= 20) {
price = copies*1.5;
} else if (copies > 50) {
price = copies*0.85;
} else {
price = copies;
}
System.out.print("Priset blir ");
System.out.print(price);
System.out.print(" kronor.");
}

System.out.println("
Nytt kort? (j/n)");
newCard = (char)System.in.read();
newCard = Character.toLowerCase(newCard);

} while (newCard == 'j');
}
}


   
Citera
Sterd

Nu har jag aldrig sysslat med Java, men kan det vara det klassiska att det ligger input kvar i buffern som behöver tas om hand i catchen?


   
SvaraCitera

nu var det länge sen jag höll på med java men är det inte så att man i regel inte ska läsa direkt från system.in utan istället använda en reader av något slag alternativt en Scanner.

exempel

Scanner in = new Scanner(System.in);
String word = in.nextline();
in.close;


   
SvaraCitera

Sterd:

Nu har jag aldrig sysslat med Java, men kan det vara det klassiska att det ligger input kvar i buffern som behöver tas om hand i catchen?

Stämmer bra, vilket man ser om man ändrar rad 40 till } while (newCard != 'n').

grön_apa:

är det inte så att man i regel inte ska läsa direkt från system.in utan istället använda en reader av något slag alternativt en Scanner.

Lyssna på denne man, han är klok.


   
SvaraCitera

Tråden låst på grund av inaktivitet


   
SvaraCitera