Problem med system.out.print i Java

Permalänk
Inaktiv

Problem med system.out.print i Java

Har ett javaprog motsvarande en kalkylator, och allt fungerar så länge jag skriver in allt rätt. Men när jag skriver in en felaktig operator, så får jag fram detta ...

Ange två tal: 1
2
Vilken operator (+ - * /) ?3
Inkorrekt operand - försök igen.
Vilken operator (+ - * /) ?-
Vad är 1-2?Vilken operator (+ - * /) ?-1
Inkorrekt operand - försök igen.
Vilken operator (+ - * /) ?-
Vad är 1-2?Vilken operator (+ - * /) ?

Någon aning om vad felet kan vara?

import java.util.Scanner; public class F3Aritmetik3 { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); int tal1; int tal2; String nästaFråga; boolean b = true; int korrektSvar = 1; boolean felaktigOperand = true; int svar; do { System.out.print("Ange två tal: "); tal1 = keyboard.nextInt(); tal2 = keyboard.nextInt(); do { System.out.print("Vilken operator (+ - * /) ?"); String operation = keyboard.next(); if (operation.equals("+")) { korrektSvar = tal1 + tal2; System.out.print("Vad är " + tal1 + "+" + tal2 + "?"); } else if (operation.equals("-")) { korrektSvar = tal1 - tal2; System.out.print("Vad är " + tal1 + "-" + tal2 + "?"); } else if (operation.equals("*")) { korrektSvar = tal1 * tal2; System.out.print("Vad är " + tal1 + "*" + tal2 + "?"); } else if (operation.equals("/")) { korrektSvar = tal1 / tal2; System.out.print("Vad är " + tal1 + "/" + tal2 + "?"); } else { felaktigOperand = false; System.out.println("Inkorrekt operand - försök igen."); } } while (felaktigOperand == false); svar = keyboard.nextInt(); if (svar == korrektSvar) { System.out.println("Korrekt svar!"); } else System.out.println("Felaktigt svar - rätt svar är " + korrektSvar + "."); System.out.print("Vill du fortsätta (JA/NEJ)? "); nästaFråga = keyboard.next(); if (nästaFråga.equals("JA") || nästaFråga.equals("Ja") || nästaFråga.equals("ja")) { } else b = false; } while (b == true); } }

Permalänk
Skrivet av El_Raspberry:

Har ett javaprog motsvarande en kalkylator, och allt fungerar så länge jag skriver in allt rätt. Men när jag skriver in en felaktig operator, så får jag fram detta ...

Ange två tal: 1
2
Vilken operator (+ - * /) ?3
Inkorrekt operand - försök igen.
Vilken operator (+ - * /) ?-
Vad är 1-2?Vilken operator (+ - * /) ?-1
Inkorrekt operand - försök igen.
Vilken operator (+ - * /) ?-
Vad är 1-2?Vilken operator (+ - * /) ?

Någon aning om vad felet kan vara?

Det gör precis som du har programmerat det? Frågar igen om du inte skriver in + -*/

Permalänk

Du sätter felaktigOperand = false vid fel men du sätter aldrig felaktigOperand = true vid rätt, dvs den är alltid false efter man skrivit fel en gång. Sätt den till true igen när man skrivit rätt operand igen så borde det fungera.

Permalänk

Du fastnar i do-while loopen, du lägger aldrig felaktigOperand till true

Permalänk
Inaktiv
Skrivet av equals(null):

Du sätter felaktigOperand = false vid fel men du sätter aldrig felaktigOperand = true vid rätt, dvs den är alltid false efter man skrivit fel en gång. Sätt den till true igen när man skrivit rätt operand igen så borde det fungera.

Skrivet av Nimrod xp3rt:

Du fastnar i do-while loopen, du lägger aldrig felaktigOperand till true

Tackar!

Förresten, vad har jag missat när det kommer till decimaldivision? 2/4 är 0.5, men får bara det till 0.0. Har ändrat variabeln till double.

EDIT: multiplicera med 1.0

Permalänk
Medlem

"korrektSvar = Math.round(tal1 / tal2);" istället för "korrektSvar = tal1 / tal2;"

BTW så skriv på engelska.

Permalänk
Medlem
Skrivet av El_Raspberry:

vad har jag missat när det kommer till decimaldivision? 2/4 är 0.5, men får bara det till 0.0. Har ändrat variabeln till double.

Vilken variabel har du ändrat? Eftersom svarsfunktionen är nextInt så kommer en "gissning" på 0.5 alltid att trunkeras till heltalet 0.

Notera även att två double-tal sällan är exakt lika, även om de matematiskt borde vara det(0.1 * 10 blir t.ex. inte exakt lika med 1.0), så du behöver sannolikt lägga in en annan funktion som läser in ett double-tal och kollar om det är nära det korrekta svaret.

Permalänk
Inaktiv
Skrivet av YooNet:

"korrektSvar = Math.round(tal1 / tal2);" istället för "korrektSvar = tal1 / tal2;"

BTW så skriv på engelska.

Skrivet av dagbro:

Vilken variabel har du ändrat? Eftersom svarsfunktionen är nextInt så kommer en "gissning" på 0.5 alltid att trunkeras till heltalet 0.

Notera även att två double-tal sällan är exakt lika, även om de matematiskt borde vara det(0.1 * 10 blir t.ex. inte exakt lika med 1.0), så du behöver sannolikt lägga in en annan funktion som läser in ett double-tal och kollar om det är nära det korrekta svaret.

Jo, ska nog ta och börja göra det.

Variablerna jag ändrade till double är svar och korrektSvar.

Men nu ändrade jag som sagt från "korrektSvar = tal1 / tal2;" till "korrektSvar = (1.0*tal1) / tal2;", men Math.round ger samma resultat?

Permalänk
Medlem
Skrivet av El_Raspberry:

Jo, ska nog ta och börja göra det.

Variablerna jag ändrade till double är svar och korrektSvar.

Men nu ändrade jag som sagt från "korrektSvar = tal1 / tal2;" till "korrektSvar = (1.0*tal1) / tal2;", men Math.round ger samma resultat?

Läste ordentligt nu och det jag skrev är helt fel.