Hallo zusammen,
ich habe eine Verständnisfrage zu Exception bzw. zum NullPointerException. Ich habe ein einfaches Programm erstellt. Hier sollen nur zwei Eingaben (ein int, ein double) gemacht werden. Diese werden als erstes in ein String gespeichert, dann in ein int umgewandelt. Dafür habe ich verschiedene Klassen angelegt. Es sollt einmal beim Einlesen (einlesen()) überprüft werden, ob der Eingabedialog abgebrochen worden ist. Wenn nicht, soll der Wert in der Methode einlesen() in ein int umgewandelt werden. Wenn ja, Abbruch des Programms.
Folgender Quellcode:
MAIN:
EINGABEKLASSEN:
SELBSTERSTELLE AUSNAHME:
Bei der Methode einlesen() gehe ich davon aus, dass bei der Eingabe (Zeile 17 - Wert wird in String eingabeTemp gespeichert) bei einem Abbruch über die catch-Anweisung (Zeile 20) über die selbsterstellte Ausnahme (AbbruchException) die Ausgabe "Eingabe wurde abgebrochen!" ausgeben wird. Als Wert kommt für den String eingabeTemp NULL, wenn der Eingabedialog abgebrochen wird. Das sollte doch reichen, damit ich die catch-Anweisung ausgeführt wird oder nicht?
Stattdessen wird "jeder" Wert einfach an die nächste Methode übergeben und weiter verarbeitet. Ich weiß nicht, wie ich in der Methode lesen() nur das Abbrechen also Ausnahme rausfiltern kann.
Danke!
ich habe eine Verständnisfrage zu Exception bzw. zum NullPointerException. Ich habe ein einfaches Programm erstellt. Hier sollen nur zwei Eingaben (ein int, ein double) gemacht werden. Diese werden als erstes in ein String gespeichert, dann in ein int umgewandelt. Dafür habe ich verschiedene Klassen angelegt. Es sollt einmal beim Einlesen (einlesen()) überprüft werden, ob der Eingabedialog abgebrochen worden ist. Wenn nicht, soll der Wert in der Methode einlesen() in ein int umgewandelt werden. Wenn ja, Abbruch des Programms.
Folgender Quellcode:
MAIN:
Java:
import javax.swing.JOptionPane;
import eingabedialog.AbbruchException;
import eingabedialog.EingabeDialog;
public static void main(String[] args)throws AbbruchException
{
int intWert = 0;
double doubleWert = 0;
//der Aufruf der Methode einlesen() mit einem
//int-Typen
intWert = EingabeDialog.einlesen(intWert);
JOptionPane.showMessageDialog(null,"Ihre Eingabe war " + intWert);
//der Aufruf der Methode einlesen() mit einem
//double-Typen
doubleWert = EingabeDialog.einlesen(doubleWert);
JOptionPane.showMessageDialog(null,"Ihre Eingabe war " + doubleWert);
}
EINGABEKLASSEN:
Java:
package eingabedialog;
import javax.swing.JOptionPane;
public class EingabeDialog
{
//Eingabe über einen Dialog
private static String lesen(String text) throws AbbruchException
{
String eingabeTemp = null;
boolean gelungen = false;
while(gelungen == false)
try
{
eingabeTemp = JOptionPane.showInputDialog(null, "Bitte geben Sie einen " + text + " Wert ein:");
gelungen = true;
}
catch (NullPointerException e)
{
throw new AbbruchException("Eingabe wurde abgebrochen!");
//JOptionPane.showMessageDialog(null, "Ihre Eingabe war nicht gültig. Bitte wiederholen...");
}
return eingabeTemp;
}
//die überladene Methode einlesen() für den Typ int
public static int einlesen(int wert) throws AbbruchException
{
int wertTemp = 0;
boolean gelungen = false;
String eingabeTemp;
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;
}
//Einlesen für double-Wert
public static double einlesen(double wert)throws AbbruchException
{
double wertTemp = 0;
boolean gelungen = false;
String eingabeTemp = null;
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;
}
}
SELBSTERSTELLE AUSNAHME:
Java:
package eingabedialog;
public class AbbruchException extends Exception
{
/**
*
*/
private static final long serialVersionUID = 1L;
//Konstruktor
AbbruchException()
{
super();
}
//Konstruktor mit Textübergabe
AbbruchException(String meldung)
{
super(meldung);
}
}
Bei der Methode einlesen() gehe ich davon aus, dass bei der Eingabe (Zeile 17 - Wert wird in String eingabeTemp gespeichert) bei einem Abbruch über die catch-Anweisung (Zeile 20) über die selbsterstellte Ausnahme (AbbruchException) die Ausgabe "Eingabe wurde abgebrochen!" ausgeben wird. Als Wert kommt für den String eingabeTemp NULL, wenn der Eingabedialog abgebrochen wird. Das sollte doch reichen, damit ich die catch-Anweisung ausgeführt wird oder nicht?
Stattdessen wird "jeder" Wert einfach an die nächste Methode übergeben und weiter verarbeitet. Ich weiß nicht, wie ich in der Methode lesen() nur das Abbrechen also Ausnahme rausfiltern kann.
Danke!