Hallo,
ich habe ein Projekt erstellt und hierzu eine Frage.
Zuerst einmal der komplette Quelltext.
1. Die Klasse zum Testen mit der main-Methode:
2. Die Klasse mit der eigenen Klasse AbbruchException:
3. Die Klasse für dein Eingabedialog:
Wenn ich in der Methode lesen (String) für die Variable eingabeTemp keine Zahl, sondern z.B. "XYZ" erfasse, dann wird in der Methode einlesen (Int) die NumberFormatException abgefangen und die Eingabe kann noch einmal wiederholt werden.
Warum wird denn hier nicht die komplette Methode einlesen (Int) abgebrochen?
Wenn ich den gleichen Effekt (also dass die Eingabe in der While Schleife wiederholt wird) in der Methode lesen (String) zu Verständniszwecken durchführen möchte, dann klappt das nicht:
Der Code ist zwar sinnlos, da es eine Endlosschleife wäre, aber ich wollte probieren, dass die Eingabe trotz Klicken auf abbrechen immer wieder ausgeführt wird.
Warum klappt das hier nicht, in der Methode einlesen (Int) aber schon?
Vielen Dank!
ich habe ein Projekt erstellt und hierzu eine Frage.
Zuerst einmal der komplette Quelltext.
1. Die Klasse zum Testen mit der main-Methode:
Java:
import javax.swing.JOptionPane;
//für die Klasse der Ausnahme AbbruchException
import eindialogV2.AbbruchException;
//für die Klasse mit dem Eingabedialog
import eindialogV2.EingabeDialogV2;
public class EingabeDialogTestV2 {
public static void main(String[] args) {
int intWert = 0;
double doubleWert = 0;
//der Aufruf der Methode einlesen() mit einem int-Typen
try {
intWert = EingabeDialogV2.einlesen(intWert);
JOptionPane.showMessageDialog(null,"Ihre Eingabe war " + intWert);
}
//die Behandlung der eigenen Exception
catch (AbbruchException e) {
JOptionPane.showMessageDialog(null,e.getMessage());
}
//der Aufruf der Methode einlesen() mit einem double-Typen
try {
doubleWert = EingabeDialogV2.einlesen(doubleWert);
JOptionPane.showMessageDialog(null,"Ihre Eingabe war " + doubleWert);
}
//die Behandlung der eigenen Exception
catch (AbbruchException e) {
JOptionPane.showMessageDialog(null,e.getMessage());
}
}
}
2. Die Klasse mit der eigenen Klasse AbbruchException:
Java:
package eindialogV2;
public class AbbruchException extends Exception {
/**
* die serialVersionUID wurde automatisch über Eclipse ergänzt
*/
private static final long serialVersionUID = 6034903258759501562L;
//der Standard-Konstruktor
AbbruchException() {
super();
}
//der Konstruktor zur Übergabe einer Meldung
//er ruft über super den Konstruktor der Basisklasse auf
AbbruchException(String meldung) {
super(meldung);
}
}
3. Die Klasse für dein Eingabedialog:
Java:
package eindialogV2;
//für den Eingabedialog
import javax.swing.JOptionPane;
public class EingabeDialogV2 {
//die Hilfsmethode zum Einlesen der Daten über den Dialog
//Beschreibung siehe oben
private static String lesen(String text)throws AbbruchException {
String eingabeTemp;
eingabeTemp = JOptionPane.showInputDialog("Bitte geben Sie einen " + text + " Wert ein:");
//Wenn die Eingabe abgebrochen wurde, wird eine selbst definierte Ausnahme ausgelöst
if (eingabeTemp == null)
throw new AbbruchException ("Die Eingabe für " + text + " wurde abgebrochen");
return (eingabeTemp);
}
//die überladene Methode einlesen() für den Typ int
//Beschreibung siehe oben
public static int einlesen(int wert) throws AbbruchException {
int wertTemp = 0;
String eingabeTemp;
boolean gelungen = false;
//solange Werte einlesen, bis die Konvertierung gelingt
//der Abbruch wird in der Methoden lesen() behandelt
while (gelungen == false) {
eingabeTemp = lesen("int");
try {
wertTemp = Integer.parseInt(eingabeTemp);
gelungen = true;
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null,"Ihre Eingabe war nicht gültig. Bitte wiederholen...");
}
}
return wertTemp;
}
//die überladene Methode einlesen() für den Typ double
//Beschreibung siehe oben bzw. bei der Methode für den int-Typ
public static double einlesen(double wert) throws AbbruchException {
double wertTemp = 0;
String eingabeTemp;
boolean gelungen = false;
while (gelungen == false) {
eingabeTemp = lesen("double");
try {
wertTemp = Double.parseDouble(eingabeTemp);
gelungen = true;
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null,"Ihre Eingabe war nicht gültig. Bitte wiederholen...");
}
}
return wertTemp;
}
//die überladene Methode einlesen() für den Typ float
//Beschreibung siehe oben bzw. bei der Methode für den int-Typ
public static float einlesen(float wert) throws AbbruchException {
float wertTemp = 0F;
boolean gelungen = false;
String eingabeTemp;
while (gelungen == false) {
eingabeTemp = lesen("float");
try {
wertTemp = Float.parseFloat(eingabeTemp);
gelungen = true;
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null,"Ihre Eingabe war nicht gültig. Bitte wiederholen...");
}
}
return wertTemp;
}
}
Wenn ich in der Methode lesen (String) für die Variable eingabeTemp keine Zahl, sondern z.B. "XYZ" erfasse, dann wird in der Methode einlesen (Int) die NumberFormatException abgefangen und die Eingabe kann noch einmal wiederholt werden.
Warum wird denn hier nicht die komplette Methode einlesen (Int) abgebrochen?
Wenn ich den gleichen Effekt (also dass die Eingabe in der While Schleife wiederholt wird) in der Methode lesen (String) zu Verständniszwecken durchführen möchte, dann klappt das nicht:
Java:
private static String lesen(String text)throws AbbruchException {
boolean wiederholen = true;
String eingabeTemp = " ";
while (wiederholen == true) {
eingabeTemp = JOptionPane.showInputDialog("Bitte geben Sie einen " + text + " Wert ein:");
//Wenn die Eingabe abgebrochen wurde, wird eine selbst definierte Ausnahme ausgelöst
if (eingabeTemp == null)
throw new AbbruchException ("Die Eingabe für " + text + " wurde abgebrochen");
}
return (eingabeTemp);
}
Der Code ist zwar sinnlos, da es eine Endlosschleife wäre, aber ich wollte probieren, dass die Eingabe trotz Klicken auf abbrechen immer wieder ausgeführt wird.
Warum klappt das hier nicht, in der Methode einlesen (Int) aber schon?
Vielen Dank!