Hallo zusammen,
ich sitze derzeitig an einem Programm, bei der die Summenformel berechnet werden soll. Allerdings liegt das Augenmerk auf das abfangen von Fehlern bei der Benutzereingabe.
Konkret läuft das Programm so ab, dass der Benutzer
- begrüßt wird
- eine ganzzahlige Zahl eingegeben werden soll
- Ist die Zahl ganzzahlig und zwischen 1 und 100 wird sie an die Fachklasse geschickt, mit der Summenformel berechnet, zurückgeschickt und anschließend auf der Konsole wieder ausgegeben.
- Ist die Zahl nicht ganzzahlig oder nicht im Intervall [1;100] kommt eine Meldung, die den Benutzer auffordert entweder a oder n einzugeben.
- mit a wird das Programm abgebrochen
- mit n startet das Programm wieder von Vorne.
- gibt der Benutzer etwas anderes ein, kann er/sie wieder zwischen a oder n entscheiden.
Bisher habe ich den folgenden Code.
Die Frage ist eigentlich nur ob ich den Code in der Starter klasse vereinfachen kann, z.B. im Catch auch abfangen, falls die Zahl nicht im Intervall [1;100] ist.
[CODE lang="java" title="Starter"]package summe;
import java.util.*;
public class Starter {
public static void main(String[] args) {
Scanner tastatur; //Scanner deklarieren
tastatur=new Scanner(System.in);
int schalter=0, b; //Scahlter auf 0 setzen
String nochmal;
Kunde meinKunde;
meinKunde=new Kunde(); //Fachklasse dekalrieren
while (schalter==0) { //Die Folgende Schleife wird solange ausgeführt, wie Scahlter den Wert 0 hat
System.out.println("Bitte geben sie ihren gewünschten Zielwert ein: "); //Ausageb Zielwert eingeben
//Lässt den Benutzer eine Zeichenkette eingeben;
try {
String a = tastatur.nextLine();
b = Integer.parseInt(a);//Lässt den Benutzer eine Zeichenkette eingeben und probiert die Zeichenkette in ein Int umzuwandeln
if (b>=100||b<=1) {
//schalter=0;
System.out.println("Es wurde keine ganze Zahl eingegeben oder sie ist nicht zwischen 1 und 100."); //User informieren dass kein Int eingeben wurde und ihn mit a oder n fortfahren lassen
System.out.println("Wollen sie (a)bbrechen oder es (n)ocheinmal versuchen");
nochmal=tastatur.next(); //Lässt den Benutzer einen String eingeben (a oder n eingeben) und in die Variable nochmal senden.
while (!(nochmal=="a")||!(nochmal=="n") ) //Solange die eingabe kein a oder n ist passiert folgendes
switch (nochmal) { //Mit Switch werden folgende Optionen für die Variable nochmal möglich
case "n": // Wenn n eingeben wurde,
Starter.main(null); //geht das Programm zur Main Methode (Z.8) über und startet von dort erneut
case "a": //Wenn a eingeben wurde,
System.out.println("Abbruch"); //User informieren dass er abbricht
System.exit(0); //Programm beenden
default: //Wenn etwas anderes eingegeben wird
System.out.println("Geben sie entweder a oder n ein");
nochmal=tastatur.next();
}
} else {
System.out.println("Eingegebene Zahl: " + b); //Gibt bei Erfolg die ganze Zahl aus
meinKunde.setZahl(b); //Sendet b in die Fachklasse
schalter++; //Addiert zum Scahlter 1 dazu, beendet die While Schleife
System.out.println("Die Summe ist " + meinKunde.calcZahl()); //DIe SUmme ausgeben
}
//Kann man ab hier vereinfachen?
} catch (NumberFormatException e ) { //Ist der String alles andere als int passiert folgendes:
b=200;
System.out.println("Es wurde keine ganze Zahl eingegeben oder sie ist nicht zwischen 1 und 100."); //User informieren dass kein Int eingeben wurde und ihn mit a oder n fortfahren lassen
System.out.println("Wollen sie (a)bbrechen oder es (n)ocheinmal versuchen");
nochmal=tastatur.next(); //Lässt den Benutzer einen String eingeben (a oder n eingeben) und in die Variable nochmal senden.
while (!(nochmal=="a")||!(nochmal=="n") ) //Solange die eingabe kein a oder n ist passiert folgendes
switch (nochmal) { //Mit Switch werden folgende Optionen für die Variable nochmal möglich
case "n": // Wenn n eingeben wurde,
Starter.main(null); //geht das Programm zur Main Methode (Z.8) über und startet von dort erneut
case "a": //Wenn a eingeben wurde,
System.out.println("Abbruch"); //User informieren dass er abbricht
System.exit(0); //Programm beenden
default: //Wenn etwas anderes eingegeben wird
System.out.println("Wie inkompetent sind sie eigentlich, geben sie entweder a oder n ein");
nochmal=tastatur.next();
}
}
}
}
}[/CODE]
[CODE lang="java" title="Kunde"]package summe;
public class Kunde {
private int zahl;
public int getZahl() {
return zahl;
}
public void setZahl(int zahl) {
this.zahl = zahl;
}
public int calcZahl(){
int a, b, c; //a=Nr. des Durchlaufs; b=Wert der Dazuaddiert wird c=b-a (Da im 2. Durchlauf n-1 addiert wird;
a=0;
b=0;
c=this.zahl;
while (a<this.zahl) { //Solange a kleiner gleich das Zielegebnis ist wird die Schleife ausgeführt:
a++;
b=b+a; //Der Wert der dazuaddiert wird (n, n-1...) von n abgezogen
//Der Überwachungsfaktor a um eins addiert (Dass er rechtzeitig die Schleife beendet
c=c+b; //Zu c (Der Summe) b addiertt wird.
} //Schleife wird beendet
return b; //Am Ende muss nochmal der Anfangswert abgezogen werden
}
//Das hier ist nur zum Überprüfen, gehört nicht zur Aufgabe.
public int summeZahl(){
int ergebnis;
ergebnis=(this.zahl*(this.zahl+1))/2;
return ergebnis;
}
//Für Fakultäten
public int multiZahl(){
int a, b, c; //a=Nr. des Durchlaufs; b=Wert der Dazuaddiert wird c=b-a (Da im 2. Durchlauf n-1 addiert wird;
a=0;
b=0;
c=this.zahl;
while (a<this.zahl) { //Solange a kleiner gleich das Zielegebnis ist wird die Schleife ausgeführt:
b=(this.zahl-a); //Der Wert der dazuaddiert wird (n, n-1...) von n abgezogen
a++; //Der Überwachungsfaktor a um eins addiert (Dass er rechtzeitig die Schleife beendet
c=c*b; //Zu c (Der Summe) b addiertt wird.
} //Schleife wird beendet
return c/this.zahl; //Am Ende muss nochmal der Anfangswert abgezogen werden
}
public int summe(){
return this.zahl/2;
}
}[/CODE]
Für eure Hilfe bin ich im Voraus dankbar.
ich sitze derzeitig an einem Programm, bei der die Summenformel berechnet werden soll. Allerdings liegt das Augenmerk auf das abfangen von Fehlern bei der Benutzereingabe.
Konkret läuft das Programm so ab, dass der Benutzer
- begrüßt wird
- eine ganzzahlige Zahl eingegeben werden soll
- Ist die Zahl ganzzahlig und zwischen 1 und 100 wird sie an die Fachklasse geschickt, mit der Summenformel berechnet, zurückgeschickt und anschließend auf der Konsole wieder ausgegeben.
- Ist die Zahl nicht ganzzahlig oder nicht im Intervall [1;100] kommt eine Meldung, die den Benutzer auffordert entweder a oder n einzugeben.
- mit a wird das Programm abgebrochen
- mit n startet das Programm wieder von Vorne.
- gibt der Benutzer etwas anderes ein, kann er/sie wieder zwischen a oder n entscheiden.
Bisher habe ich den folgenden Code.
Die Frage ist eigentlich nur ob ich den Code in der Starter klasse vereinfachen kann, z.B. im Catch auch abfangen, falls die Zahl nicht im Intervall [1;100] ist.
[CODE lang="java" title="Starter"]package summe;
import java.util.*;
public class Starter {
public static void main(String[] args) {
Scanner tastatur; //Scanner deklarieren
tastatur=new Scanner(System.in);
int schalter=0, b; //Scahlter auf 0 setzen
String nochmal;
Kunde meinKunde;
meinKunde=new Kunde(); //Fachklasse dekalrieren
while (schalter==0) { //Die Folgende Schleife wird solange ausgeführt, wie Scahlter den Wert 0 hat
System.out.println("Bitte geben sie ihren gewünschten Zielwert ein: "); //Ausageb Zielwert eingeben
//Lässt den Benutzer eine Zeichenkette eingeben;
try {
String a = tastatur.nextLine();
b = Integer.parseInt(a);//Lässt den Benutzer eine Zeichenkette eingeben und probiert die Zeichenkette in ein Int umzuwandeln
if (b>=100||b<=1) {
//schalter=0;
System.out.println("Es wurde keine ganze Zahl eingegeben oder sie ist nicht zwischen 1 und 100."); //User informieren dass kein Int eingeben wurde und ihn mit a oder n fortfahren lassen
System.out.println("Wollen sie (a)bbrechen oder es (n)ocheinmal versuchen");
nochmal=tastatur.next(); //Lässt den Benutzer einen String eingeben (a oder n eingeben) und in die Variable nochmal senden.
while (!(nochmal=="a")||!(nochmal=="n") ) //Solange die eingabe kein a oder n ist passiert folgendes
switch (nochmal) { //Mit Switch werden folgende Optionen für die Variable nochmal möglich
case "n": // Wenn n eingeben wurde,
Starter.main(null); //geht das Programm zur Main Methode (Z.8) über und startet von dort erneut
case "a": //Wenn a eingeben wurde,
System.out.println("Abbruch"); //User informieren dass er abbricht
System.exit(0); //Programm beenden
default: //Wenn etwas anderes eingegeben wird
System.out.println("Geben sie entweder a oder n ein");
nochmal=tastatur.next();
}
} else {
System.out.println("Eingegebene Zahl: " + b); //Gibt bei Erfolg die ganze Zahl aus
meinKunde.setZahl(b); //Sendet b in die Fachklasse
schalter++; //Addiert zum Scahlter 1 dazu, beendet die While Schleife
System.out.println("Die Summe ist " + meinKunde.calcZahl()); //DIe SUmme ausgeben
}
//Kann man ab hier vereinfachen?
} catch (NumberFormatException e ) { //Ist der String alles andere als int passiert folgendes:
b=200;
System.out.println("Es wurde keine ganze Zahl eingegeben oder sie ist nicht zwischen 1 und 100."); //User informieren dass kein Int eingeben wurde und ihn mit a oder n fortfahren lassen
System.out.println("Wollen sie (a)bbrechen oder es (n)ocheinmal versuchen");
nochmal=tastatur.next(); //Lässt den Benutzer einen String eingeben (a oder n eingeben) und in die Variable nochmal senden.
while (!(nochmal=="a")||!(nochmal=="n") ) //Solange die eingabe kein a oder n ist passiert folgendes
switch (nochmal) { //Mit Switch werden folgende Optionen für die Variable nochmal möglich
case "n": // Wenn n eingeben wurde,
Starter.main(null); //geht das Programm zur Main Methode (Z.8) über und startet von dort erneut
case "a": //Wenn a eingeben wurde,
System.out.println("Abbruch"); //User informieren dass er abbricht
System.exit(0); //Programm beenden
default: //Wenn etwas anderes eingegeben wird
System.out.println("Wie inkompetent sind sie eigentlich, geben sie entweder a oder n ein");
nochmal=tastatur.next();
}
}
}
}
}[/CODE]
[CODE lang="java" title="Kunde"]package summe;
public class Kunde {
private int zahl;
public int getZahl() {
return zahl;
}
public void setZahl(int zahl) {
this.zahl = zahl;
}
public int calcZahl(){
int a, b, c; //a=Nr. des Durchlaufs; b=Wert der Dazuaddiert wird c=b-a (Da im 2. Durchlauf n-1 addiert wird;
a=0;
b=0;
c=this.zahl;
while (a<this.zahl) { //Solange a kleiner gleich das Zielegebnis ist wird die Schleife ausgeführt:
a++;
b=b+a; //Der Wert der dazuaddiert wird (n, n-1...) von n abgezogen
//Der Überwachungsfaktor a um eins addiert (Dass er rechtzeitig die Schleife beendet
c=c+b; //Zu c (Der Summe) b addiertt wird.
} //Schleife wird beendet
return b; //Am Ende muss nochmal der Anfangswert abgezogen werden
}
//Das hier ist nur zum Überprüfen, gehört nicht zur Aufgabe.
public int summeZahl(){
int ergebnis;
ergebnis=(this.zahl*(this.zahl+1))/2;
return ergebnis;
}
//Für Fakultäten
public int multiZahl(){
int a, b, c; //a=Nr. des Durchlaufs; b=Wert der Dazuaddiert wird c=b-a (Da im 2. Durchlauf n-1 addiert wird;
a=0;
b=0;
c=this.zahl;
while (a<this.zahl) { //Solange a kleiner gleich das Zielegebnis ist wird die Schleife ausgeführt:
b=(this.zahl-a); //Der Wert der dazuaddiert wird (n, n-1...) von n abgezogen
a++; //Der Überwachungsfaktor a um eins addiert (Dass er rechtzeitig die Schleife beendet
c=c*b; //Zu c (Der Summe) b addiertt wird.
} //Schleife wird beendet
return c/this.zahl; //Am Ende muss nochmal der Anfangswert abgezogen werden
}
public int summe(){
return this.zahl/2;
}
}[/CODE]
Für eure Hilfe bin ich im Voraus dankbar.