JAVA nur Eingabe von natürliche Zahlen erleuben.?
Ich wollte das Programm nur Eingabe von natürliche Zahlen erlauben.
ich möchte z.b. dass eine Fehlermeldung kommt, wenn eine Buchtabe oder (Dismallz) Prozent Zahlen mit Puntk eingegeben wird.
Habt Ihr eine Idee danke im Voraus.
public class Wachstum {
public static void main(String[] args) {
int monate;
double anzahlMaeuse;
double wachtstumsFaktor;
double reduzierung;
double aktueleAnzahlMaeuse = 0;
Scanner x = new Scanner(System.in);
System.out.println("Geben Sie bitte Monatszahl ein");
monate = x.nextInt();
System.out.println("Geben Sie bitte die AnzahlMaeuse ein");
anzahlMaeuse = x.nextInt();
System.out.println("Geben Sie bitte die Wachstumszahl ein");
wachtstumsFaktor = x.nextInt();
System.out.println("Geben Sie bitte die Reduzierungzahl ein");
reduzierung = x.nextInt();
for (int i = 0; i < monate; i++) {
anzahlMaeuse += anzahlMaeuse * wachtstumsFaktor / 100;
aktueleAnzahlMaeuse -= anzahlMaeuse * reduzierung / 100;
}
System.out.println(aktueleAnzahlMaeuse);
}
}
2 Antworten
Ich nehme mal an, dass du in echt folgendes haben willst:
- Das Programm soll nicht abstürzen wenn man eine falsche Zahl eingibt
- Stattdessen soll der Fehler abgefangen (also gecatcht) werden
- Dann soll dem Nutzer eine verständliche Fehlermeldung ausgegeben werden
- Dann soll der Nutzer die Zahl erneut eingeben können
Dein Programm wirft ja bereits einen Fehler, wenn bei nextInt() keine Ganzzahl eingegeben wird. Hast du sicher schon bemerkt. Um solche Fehler - Exceptions genannt - abzufangen benutzt man try-catch. Am besten einfach googlen. Das habe ich hier in eine extra Funktion (initGanzzahl) gepackt, um unnötiges Wiederholen von Code zu vermeiden.
Hier meine Musterlösung:
public class Wachstum {
public static Scanner scanner;
public static void main(String[] args) {
scanner = new Scanner(System.in);
int monate = initGanzzahl("Geben Sie bitte die Monatszahl ein");
double anzahlMaeuse = initGanzzahl("Geben Sie bitte die AnzahlMaeuse ein");
double wachstumsFaktor = initGanzzahl("Geben Sie bitte den Wachstumsfaktor ein");
double reduzierung = initGanzzahl("Geben Sie bitte die Reduzierungzahl ein");
double aktueleAnzahlMaeuse = 0;
for (int i = 0; i < monate; i++) {
anzahlMaeuse += anzahlMaeuse * wachstumsFaktor / 100;
aktueleAnzahlMaeuse -= anzahlMaeuse * reduzierung / 100;
}
System.out.println(aktueleAnzahlMaeuse);
}
public static int initGanzzahl(String aufforderung){
System.out.println(aufforderung);
while(true){
try {
return scanner.nextInt();
} catch(InputMismatchException e){ //Falls man keine Ganzzahl eingegeben hat wird der Fehler hier abgefangen
System.out.println( scanner.next() + " ist keine ganze Zahl! Wiederholen Sie die Eingabe:");
}
}
}
}
(In schön: https://hastebin.com/efimecexot.cs )
Das sollte dir eigentlich bereits eine Exception schmeißen, wenn du etwas eingibst, was sich nicht in ein Integer umwandeln lässt.