Java, min if else sats funkar inte som den ska

Permalänk
Medlem

Java, min if else sats funkar inte som den ska

Hej!
Jag gör en "affär" i Java. Man trycker på knappen för att lägga till kunden och skriver in kundens namn samt antal varor. Det jag ska göra är att skriva ut ett meddelande ifall användaren skriver in något annat än siffra i antal varor. Jag försökte lösa problemet på två sätt men varje gånghänder det att om användaren skriver in något annat än siffra får jag bara massa röd text som error istället för meddelandet. här är båda metoder jag använde, hoppas ni vet varför den inte går in i else statement.

if(a >= '0' && a <= '9') {
System.out.println("test 1 ");
} else {
System.out.println("Test2 ");
}

Metod 2:

boolean checkInt = Character.isDigit(a);
if(checkInt){
System.out.println("test1");
}else {
System.out.println("test2");
}

Permalänk
Medlem

Ingen expert på Java men det verkar som du jämför med tecknen 0 och 9 snarare än det numeriska värdet i första exemplet. Du visar inte hur du deklarerat a så därför går det inte att avgöra mer exakt vad som är fel men gissar att det förmodligen är därför du får fel även i andra exemplet.

Ett protip kan annars överlag vara att faktiskt läsa den "röda texten" du får som ofta tenderar att vara rätt informativ

Permalänk
99:e percentilen
Skrivet av Natta98:

varje gånghänder det att om användaren skriver in något annat än siffra får jag bara massa röd text som error istället för meddelandet.

I allmänhet när du ber om hjälp med programmering är det bra att känna till att ovanstående inte är särskilt informativt överhuvudtaget för andra som inte är insatta i din kod och ditt tänk. Det är mycket bättre att posta det faktiska felmeddelandet än att bara berätta att du får ett felmeddelande.

Gissningsvis har du använt en så kallad icke-total funktion, det vill säga en som bara är väldefinierad för vissa indata (i detta fall tecken som motsvarar siffror).

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem
Skrivet av Natta98:

Hej!
Jag gör en "affär" i Java. Man trycker på knappen för att lägga till kunden och skriver in kundens namn samt antal varor. Det jag ska göra är att skriva ut ett meddelande ifall användaren skriver in något annat än siffra i antal varor. Jag försökte lösa problemet på två sätt men varje gånghänder det att om användaren skriver in något annat än siffra får jag bara massa röd text som error istället för meddelandet. här är båda metoder jag använde, hoppas ni vet varför den inte går in i else statement.

if(a >= '0' && a <= '9') {
System.out.println("test 1 ");
} else {
System.out.println("Test2 ");
}

Metod 2:

boolean checkInt = Character.isDigit(a);
if(checkInt){
System.out.println("test1");
}else {
System.out.println("test2");
}

något annat än siffra får jag bara massa röd text som error istället för meddelandet.
Var gärna mer specifik, vad är det för felmeddelande och på vilken rad gäller meddelandet? Detta är ju A och O om man ska veta vad som går fel.

if(a >= '0' && a <= '9')

Antar att a som du jämför mot är användarens inputen?
Du kollar nu om användarens input är större eller lika med 0 som en char. Mitt antagande är att värden du vill kolla är 0 samt 9, alltså utan single quotes (').
Jag vet inte exakt hur Java fungerar (om den jämför ASCII-värdet by default), då jag jobbar med C#, men då syntaxen är snarlik så lär det lösa ditt problem.

Är det ett exception du får vid inmatningen, NumberFormatException?
Så bör något i denna stil lösa problemet:

Scanner user_input = new Scanner(System.in); var a = user_input.next(); try { Integer.parseInt(a); System.out.println("Success!"); } catch (NumberFormatException e) { System.out.println("That's not a number!"); }

Detta är då paraseInt tar in en sträng och försöker konvertera värdet till ett heltal (integer). Om det inte går, t.ex. en bokstav går inte att göra om till ett heltal, så kommer programmet att throwa ett NumberFormatException. Har du då ingen try/catch runt det så kommer programmet att stängas av.
Det try/catch gör att fånga det specifika felet och hantera det inne i catch-blocket.

Permalänk
Medlem

@Natta98: Det går inte att använda > eller < när du jämför en sträng som variabeln a matas med.

Visa signatur

*5600|B350M-A|32GB|A750|GX750W|Core V21|280AIO|1TB+2TB.

AMD Ryzen 5(Zen3) @4891|Asus Prime|Corsair 2x16 RGB PRO 3200C16 @3800C18|Intel Arc LE @2740MHz|Seasonic Focus| Thermaltake mATX kub|Arctic freezer II| NVMe SSD PCIE 3.0x2 Kingston A1000 1500/1000 + 2,5" HDD Toshiba 1TB & Samsung 1TB i RAID 0.