Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich probiere gerade etwas mit try und catch und bin auf folgendes Problem gestoßen: Ich hatte bei Exeption bisher immer als Parameter x. Halt so das er auf alle Fehler anspringt. Aber kann ich es auch so einstellen das er nur auf Buchstaben anspringt? Nämlich wenn ich auf abbrechen klicke nimmt er das auch als Fehler auf und ich werde wieder zurück in die Schleife geworfen
Hier nochmal der Code:
Java:
package paket1;
import javax.swing.JOptionPane;
public class Klasse1 {
public static void main(String[] args) {
int Zufall =(int) (Math.random()*1000)+1;
String Eingabe= ""; int Zahl = 0;int Versuche = 0;
while(Zahl !=Zufall){
try{
Eingabe=JOptionPane.showInputDialog("Rate mal: ");
Versuche++;
Zahl= Integer.parseInt(Eingabe);
if (Zahl>Zufall&&Zahl!=0){
JOptionPane.showMessageDialog(null, "Zu groß! "+Versuche+". Versuch.");
}
if (Zahl<Zufall&&Zahl!=0){
JOptionPane.showMessageDialog(null, "Zu klein! "+Versuche+". Versuch.");
}
if (Zahl==Zufall&&Zahl!=0){
JOptionPane.showMessageDialog(null, "Richtig! "+"8Du hast "+Versuche+". Versuche gebraucht!");
}
if (Zahl==0){
JOptionPane.showMessageDialog(null, "Abgebrochen da eine Null eingegeben wurde.");
break;
}
if (Zahl==JOptionPane.CANCEL_OPTION){
break;
}
}catch (Exception x)// Gibt es hier ein anderes Paramer für x?
{
JOptionPane.showMessageDialog(null, "Falsche Eingabe");
}
}//while
}//main
}//class
Was meinst du damit genau ? in der Klammer beim catch sagst du welche Exception du hier abfangen willst. Wie du die nennst ist egal, du kannst die auch Exception y nennen, und du könntest die Exception hier auch noch genauer spezifizieren. s.u.
Bei deinem Code wird ja wahrscheinlich hier eine NumberFormatException kommen wenn du etwas anderes als eine Integerzahl eingibst. Was willst du denn genau machen ?
Du nimmst vermutlich an, dass beim Betätigen des Abbrechen-Buttons so eine Art "AbbrechenGedrückt-Exception" geworfen wird, die du abfangen möchtest. Es läuft aber etwas anders. Wenn Abbrechen gedrückt wird, wird deiner Variablen Eingabe null zugewiesen (auch falls ein Wert eingegeben wurde). Beim Versuch, das mittels Zahl= Integer.parseInt(Eingabe); in eine Zahl zu konvertieren kommt es zu einer NumberFormatException. Das ist aber dieselbe Exception, die auch beispielsweise nach der Eingabe eines Buchstabens geworfen würde, deshalb kommst du damit nicht so leicht weiter. Du könntest stattdessen einfach aus der Schleife springen, wenn Eingabe null enthält.
Hallo nochmal,
alle Eingaben die keine Zahlen sind sollen abgefangen werden. Aber im Moment wird halt auch die Funktion vom Abbrechen Button abgefangen und als "Fehler" dargestellt wobei er ja die Schleife unterbrechen soll wenn man auf abbrechen klickt.
Noch einmal: durch das Drücken des Abbrechen-Buttons wird keine Exception geworfen, sondern der Dialog liefert null zurück. Deshalb kannst du das auch nicht über catch abfangen. Dass du trotzdem in deinem catch-Block landest liegt daran, dass etwas später Zahl= Integer.parseInt(null); eine Exception wirft, die sich aber nicht von der Exception unterscheidet, die beispielsweise bei Zahl= Integer.parseInt("abc"); geworfen wird. Du solltest einfach nach Aufruf des Dialogs prüfen, ob null zurück geliefert wurde und dann entsprechend reagieren.
Also Exceptions sollten für exceptional situations da sein. Oder auf Deutsch: Ausnahmen sollten wirklich nur für Ausnahmefälle da sein.
User gibt etwas ungültiges ein ist keine Ausnahmesituation! Statt also offenen Auges in die Exception zu laufen sollte eine Eingabe validiert werden!
Das ist ansonsten so wie mit dem Auto in die Garage zu fahren und dann die Exception "TorWarZu" zu behandeln. Na klar geht das - Auto und Tor werden dann einfach repariert. Aber das Vorgehen ist nicht optimal und jeder schaut vorher, ob das Tor offen ist...
Eingaben kannst du zum Beispiel mit einem regulären Ausdruck prüfen.
Im folgenden Beispiel wird geschaut ob deine Eingabe eine Zahl ohne führende 0 ist.
Falls das so ist wird dann erst der String in einen Integer geparst.
[1-9] steht hierbei für eine Zahl zwischen 1 und 9.
[0-9]* sagt aus, dass eine Zahl von 0 bis 9 vorkommen kann und zwar "kein Mal" bis "beliebig oft".