Vinnaren i pepparkakshustävlingen!
2020-06-26, 09:53
  #1
Medlem
Hej

Hoppas inte att detta blir för luddigt men
går nu en kurs i Java där jag fått i uppgift att göra ett program där användaren ska kunna ange ett tal och därefter sin ålder. Efter det ska jag (beroende på inom vilket intervall talet ligger) beräkna en procentsats.

Har gjort en dialogruta där användaren kan ange sitt tal och sen gjort så att talet räknas om till int. Därefter kommer en ja/nej-fråga om åldern.

String s = JOptionPane.showInputDialog("Ange ett tal");
int tal = Integer.parseInt(s);

int s1 = JOptionPane.showConfirmDialog(null, "Är du över 35 år?", "Fråga", JOptionPane.YES_NO_OPTION);


Men eftersom att användaren även kan ange bokstäver och olika symboler istället för ett tal så hade jag velat ha att det kommer upp en ruta med tex "ogiltligt tal, försök igen" eller liknande.
Har funderat på om jag kan göra en loop men vet inte exakt hur jag ska göra?
Försökte med

for ( int i=1; i<=s.length(); i++)
{ if (s.charAt(i) >= '0' && s.charAt(i) <= '9')

int tal = Integer.parseInt(s);
else
JOptionPane.showMessageDialog(null, "Inget tal, försök igen");

}

då jag ville att loopen skulle genomsöka talet och se om det var enbart siffror. Om det var ett tal så vill jag att programmet ska göra om string till int ( som jag skrev högre upp) så att jag kan göra matematiska uträkningar. Men jag får det inte att fungera. Om det inte är ett tal så ska en ruta visas med text.

Efter detta vill jag att loopen ska avslutas och åldersfrågan kommer och därefter beräkningarna med procentsatser. Där tänkte jag göra if-satser beroende på vilket intervall talet hamnar inom.

Någon som vet om det går att göra en loop som testar att det är ett giltigt tal? Har försökt ett tag nu men jag får det inte att fungera..
Citera
2020-06-26, 10:22
  #2
Medlem
Citat:
Ursprungligen postat av GranenGran
...
då jag ville att loopen skulle genomsöka talet och se om det var enbart siffror. Om det var ett tal så vill jag att programmet ska göra om string till int ( som jag skrev högre upp) så att jag kan göra matematiska uträkningar. Men jag får det inte att fungera. Om det inte är ett tal så ska en ruta visas med text.
Någon som vet om det går att göra en loop som testar att det är ett giltigt tal? Har försökt ett tag nu men jag får det inte att fungera..

Du behöver inte loopa. Kör med try/catch runt Integer.parseInt(). Om du får en exception är det inte en integer.

Vill du flasha kan du även köra en keyboardlistener som lyssnar på tryckningar, eller en changelistener på textfältet.

Varje gång det förändras kan du köra integer.parseint på texten, och om det inte är en int kan du ha en label i rött under där det står "du måste skriva in en siffra", och även disabla "ok"-knappen.
Citera
2020-06-26, 10:35
  #3
Moderator
Protons avatar
Citat:
Ursprungligen postat av GranenGran
Hej

Hoppas inte att detta blir för luddigt men
går nu en kurs i Java där jag fått i uppgift att göra ett program där användaren ska kunna ange ett tal och därefter sin ålder. Efter det ska jag (beroende på inom vilket intervall talet ligger) beräkna en procentsats.

Har gjort en dialogruta där användaren kan ange sitt tal och sen gjort så att talet räknas om till int. Därefter kommer en ja/nej-fråga om åldern.

String s = JOptionPane.showInputDialog("Ange ett tal");
int tal = Integer.parseInt(s);

int s1 = JOptionPane.showConfirmDialog(null, "Är du över 35 år?", "Fråga", JOptionPane.YES_NO_OPTION);


Men eftersom att användaren även kan ange bokstäver och olika symboler istället för ett tal så hade jag velat ha att det kommer upp en ruta med tex "ogiltligt tal, försök igen" eller liknande.
Har funderat på om jag kan göra en loop men vet inte exakt hur jag ska göra?
Försökte med

for ( int i=1; i<=s.length(); i++)
{ if (s.charAt(i) >= '0' && s.charAt(i) <= '9')

int tal = Integer.parseInt(s);
else
JOptionPane.showMessageDialog(null, "Inget tal, försök igen");

}

då jag ville att loopen skulle genomsöka talet och se om det var enbart siffror. Om det var ett tal så vill jag att programmet ska göra om string till int ( som jag skrev högre upp) så att jag kan göra matematiska uträkningar. Men jag får det inte att fungera. Om det inte är ett tal så ska en ruta visas med text.

Efter detta vill jag att loopen ska avslutas och åldersfrågan kommer och därefter beräkningarna med procentsatser. Där tänkte jag göra if-satser beroende på vilket intervall talet hamnar inom.

Någon som vet om det går att göra en loop som testar att det är ett giltigt tal? Har försökt ett tag nu men jag får det inte att fungera..
Du skulle ju kunna prova med ett sådant här trick:

Kod:
public static boolean isNumeric(String str) {
  
NumberFormat formatter NumberFormat.getInstance();
  
ParsePosition pos = new ParsePosition(0);
  
formatter.parse(strpos);
  return 
str.length() == pos.getIndex();
}

//mer kod....

String str JOptionPane.showInputDialog("Ange ett tal");
while(!
isNumeric(str)){
JOptionPane.showMessageDialog(null"Inget tal, försök igen");
str JOptionPane.showInputDialog("Ange ett tal");

}

System.out.printl(str); //bör vara ett tal nu. 

inspiration till isNumeric:

https://stackoverflow.com/questions/...umeric-in-java
Citera
2020-06-26, 13:43
  #4
Medlem
Citat:
Ursprungligen postat av RoyBatty
Du behöver inte loopa. Kör med try/catch runt Integer.parseInt(). Om du får en exception är det inte en integer.

Vill du flasha kan du även köra en keyboardlistener som lyssnar på tryckningar, eller en changelistener på textfältet.

Varje gång det förändras kan du köra integer.parseint på texten, och om det inte är en int kan du ha en label i rött under där det står "du måste skriva in en siffra", och även disabla "ok"-knappen.


Tack för tipset! Kanske testar att flasha lite
Citera
2020-06-26, 13:44
  #5
Medlem
Citat:
Ursprungligen postat av Proton
Du skulle ju kunna prova med ett sådant här trick:

Kod:
public static boolean isNumeric(String str) {
  
NumberFormat formatter NumberFormat.getInstance();
  
ParsePosition pos = new ParsePosition(0);
  
formatter.parse(strpos);
  return 
str.length() == pos.getIndex();
}

//mer kod....

String str JOptionPane.showInputDialog("Ange ett tal");
while(!
isNumeric(str)){
JOptionPane.showMessageDialog(null"Inget tal, försök igen");
str JOptionPane.showInputDialog("Ange ett tal");

}

System.out.printl(str); //bör vara ett tal nu. 

inspiration till isNumeric:

https://stackoverflow.com/questions/...umeric-in-java


Åh det såg avancerat ut Ska testa! Tack för hjälpen
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback