Zum Inhalt springen

Java Exeption Problem


blondi2108

Empfohlene Beiträge

Hi Ihr,

ich habe erst im August meien Ausbildung als Fachinformatikerin Ae angefangen und mir mehr oder weniger die ersten Start -Versuche von Java selber beigebracht. Nun hat mich mein Ausbilder gebeten einen EC-Automaten zu programmieren. Dies habe ich fast Fehlerfrei bewältigt, doch mein Ausbilder hatte etwas zu meckern... Bei der folgenen try-catch Abfrage soll ich laut seinen Aussagen einen Fehler gemacht haben(etwas vergessen haben) Er fragte: Was ist wenn ioexeptions und number exeptions nicht zutreffen?.. laufzeitfehler.. :confused:

Kann mir jemand helfen und mir schreiben, was ich in dem Code noch einfügen muss? Hier ein Ausschnitt..DANKE:)

System.out.println("Das Konto ist leer, drücken Sie [0] zum einzahlen des Geldes!");

try

{

zahl = Integer.parseInt(stdin.readLine());

}

catch(IOException e)

{

System.out.println("Falsche Eingabe");

starteingabe();

}

catch(NumberFormatException e)

{

System.out.println("Falsche Eingabe");

starteingabe();

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

[ CODE ] und [ /CODE ] machen das ganze übersichtlicher. ;-)

catch(Exception e)

Sollte zumindest. Lange lange isses aber her. ;-)

*edit*

mal grad fix nachgeschaut

Galileo Computing :: Java ist auch eine Insel – 7.2 Die Klassenhierarchie der Fehler

Tutorial / Java Grundlagen / Exceptions

Wenn du schlauer werden magst. ;-)

Mit freundlichen Grüßen,

Cadpax

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich stell' mir aber eher die Frage, wie denn da eine andere Exception fliegen soll?!? Die möglichen Exceptions werden von den Methoden, die Du nutzt, vorgegeben. Andere sind IMHO nicht möglich. Sicher kannst Du die beiden Blöcke zu einem Blocj zusammenfassen, da sie eh' das gleiche tun. Aber das ist ein anderes Paar Schuhe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe ich geschrieben. ;-)

catch(Exception e)

fängt dir alle Fehler auf, die nicht auf die zutreffen, die du abfängst.

try

{

zahl = Integer.parseInt(stdin.readLine());

}

catch(IOException e)

{

System.out.println("Falsche Eingabe");

starteingabe();

}

catch(NumberFormatException e)

{

System.out.println("Falsche Eingabe");

starteingabe();

}

catch(Exception e)

{

....

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich stell' mir aber eher die Frage, wie denn da eine andere Exception fliegen soll?!? Die möglichen Exceptions werden von den Methoden, die Du nutzt, vorgegeben. Andere sind IMHO nicht möglich. Sicher kannst Du die beiden Blöcke zu einem Blocj zusammenfassen, da sie eh' das gleiche tun. Aber das ist ein anderes Paar Schuhe.

Sehe ich 100% genau so. Die Erweiterung mit "catch (Exception e)" sehe ich für total überflüssig an!

Im übrigen versuche ich catch(Excep...) im code zu vermeiden, da es den Code unleserlicher macht und auch eine Fehlerquelle darstellen kann, falls nämlich eine Exception an dieser stelle versickert an die nicht gedacht wurde. Ich bin der Meinung man sollte bewusst einzelne Exeptions fangen und nicht einfach alle (Ausnahmen gibt es natürlich!).

Evtl. könnte dein Ausbilder auch einen fehlenden finally block vermissen. Da du ja hier einen IO zugriff machst sollte nicht vergessen werden diesen IO stream auch wieder zu schließen.

so in der Art:

try {

...

} catch (...) {

...

} finally {

io.close();

}

viele grüße,

nab.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also das würd ich auch beanstanden, allerdings nicht weil ein Exceptionhandler fehlt.

  1. Die Fehlermeldung ist wenig aussagekräftig
  2. Rekursiver Aufruf

In beiden Fehlerfällen gibst Du aus "Falsche Eingabe" Das stimmt aber z.B. bei einer IOException nicht. Hier muss dem Benutzer mitgeteilt werden, dass etwas grundlegendes nicht stimmt (Die Standardstreams von Java funktionieren hier nicht) und dann das Programm auch beendet werden.

Zum Rekursiven Aufruf. Du rufst im Fehlerfall deine eigene Methode wieder auf. Das nennt sich Rekusion und hat in deinem Fall zur Folge, dass bei genügend Fehleingaben irgendwann ein OutOfMemoryError geworfen wird. Du solltest das lieber in einer Schleife erledigen, die erst verlassen wird, wenn die Eingabe korrekt war. Etwa so:

boolean isCorrect=false;

do

{

//Eingabe und Eingabeprüfung

isCorrect=true;

catch(NumberFormatException e)

{/*Fehlermeldung*/}

}while(isCorrect==false);

isCorrect wird also nur auf true gesetzt, wenn keine NumberFormatException auftritt und die Schleife damit beendet.

Andere Exceptions können hier eigentlich nicht auftreten und einen Error fängst Du mit einem catch(Exception e) auch nicht. Dazu müsstest Du Throwable catchen und da sollte man schon genau wissen wie man dann weiter macht.

Meiner Meinung nach fehlt hier kein weiterer Exceptionhandler und dein Ausbilder hat unrecht.

Da du ja hier einen IO zugriff machst sollte nicht vergessen werden diesen IO stream auch wieder zu schließen.

Genau. Du schließt den Standardeingabestream... :uli

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Ihr,

gaaaanz lieben Dank an alle! Super Tips die ich auch umgesetzt habe!!!

Jetzt geht es weiter mit dem EC_Automaten..

Nun möchte er von mir eine Benutzeroberfläche haben..

Seit gestern habe ich zumindest schon die dazugehörigen Schaltflächen gebaut.. Aber leider erklärt mir kein Tutorial genau (für Blondinen geeignet) wie ich den Schaltflächen jetzt die auszuführenden Befehle erteile!!!

Jemand nen Tip, wo ich das Blondinen gerecht nachlesen kann...

Danke... und in 6 Stunden ist Wochenende...

Link zu diesem Kommentar
Auf anderen Seiten teilen


import java.awt.*;
import java.awt.event.*;

public class AL extends Frame implements WindowListener,ActionListener {
TextField text = new TextField(20);
Button b;
private int numClicks = 0;

public static void main(String[] args) {
AL myWindow = new AL("My first window");
myWindow.setSize(350,100);
myWindow.setVisible(true);
}

public AL(String title) {

super(title);
setLayout(new FlowLayout());
addWindowListener(this);
b = new Button("Click me");
add(;
add(text);
b.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
numClicks++;
text.setText("Button Clicked " + numClicks + " times");
}

public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}

public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}

}
[/PHP]

Quelle

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...