Frage an Erfahrenere Java-Programmierer
-
Ich versuche gerade eine simple Menüstruktur zu entwickeln.
Besondere Probleme habe ich dabei mit den try - und catch Konstrukten und dem wiederaufrufen von Funktionen, wenn sie fehlerhat behandelt wurden.Ich habe jetzt zwei Klassen erstellt, welche meinem Zweck erstmal genügen und mich interessiert, ob das so allgemeingültig gelöst werden kann.
Oder ob da dicke Patzer drinne sind, welche man als Anfänger nicht so sieht.Und ob man das ganze geschickter, sicherer oder wie auch immer gestalten könnte.
Für Antworten und Tipps bin ich sehr dankbar.
Der Freak"Main" Klasse:
[java]
class Editor{public static void main(String args[]){
Menu neuesmenu = new Menu();
Eingaben erste = new Eingaben();
neuesmenu.hello();
erste.choosenumber();
System.out.println("Eingabe: "+ erste.get_menuwahl());
}
}
[/code]"Zweite" Klasse
[java]
import java.io.*;class Eingaben{
int menuwahl;
//Set Methods
//This Method sets the menuwahl value.
public void choosenumber()
{
try {
BufferedReader menuinput = new BufferedReader(new InputStreamReader(System.in));
menuwahl = Integer.parseInt(menuinput.readLine());
//Eigene throw Definition
if (menuwahl > 3|| menuwahl < 0)
throw new IOException();
}
catch(IOException s){
System.out.println("Ihre Eingabe lag ausserhalb des "+
"Bereiches welcher gltig ist, bitte wiederholen Sie sie.");
choosenumber();
}catch(Exception e){
System.out.println("Ihre Eingabe war fehlerhaft, bitte wiederholen Sie sie.");
choosenumber();
}
}//get Methods
public int get_menuwahl(){
return(menuwahl);
}}
[/code]nu aber ...
[ Dieser Beitrag wurde am 04.07.2003 um 12:09 Uhr von Freak editiert. ]
-
Hi,
irgendwie vergewaltigst du hier das Exception-Konzept wenn ich das mal so sagen darf. Du solltest deinen Programmfluss nicht über Exceptions steuern und wenn du schon eine Exception wirfst dann fang sie nicht gleich wieder selbst auf sondern lass sie an die aufrufende Stelle weiterreichen.
Ich würde das über eine simple while-Schleife lösen - damit ersparst du dir ein wenig Code und Resourcen
-
Hi Cengiz.
Ehm Du meinst mit "vergewaltigen" bestimmt meine eigene Exception, oder?
Weil eine ander _muss_ ich ja angeben.
Aber wenn ich dass über eine while-schleife realisiere, kann ich dann auch den Methodenaufruf aus dem Rumpf vornehmen?
Wahrscheinlich ja *denknach*.
Aber erstmal Danke für Deinen "dezenten" Hinweis, wie meine Lösung bezüglich der Exceptions aussieht ;).
Danke.
-
Aber wenn ich dass über eine while-schleife realisiere, kann ich dann auch den Methodenaufruf aus dem Rumpf vornehmen?
können schon, aber die Schleife nimmt dir das ja ohnehin ab:
while(true) { int zahl=0; try{zahl= ...irgendwie zahl einlesen}catch(bla){} if (zahl<0 || zahl>3) System.out.println("falsch, nochmal eingeben"); else break; }
du kannst es auch mit ner Exception machen.. falsch wär das meiner Ansicht nach nicht, da man es ja schon als Ausnahme bezeichnen kann, daß der User was falsches eingibt (häufige Ausname ) , aber das Catchen dann wie gesagt dem Aufrufer überlassen
[ Dieser Beitrag wurde am 04.07.2003 um 13:01 Uhr von crass editiert. ]
-
Original erstellt von crass:
**
du kannst es auch mit ner Exception machen.. falsch wär das meiner Ansicht nach nicht, da man es ja schon als Ausnahme bezeichnen kann, daß der User was falsches eingibt (häufige Ausname )
**IMHO nicht. Ne Ausnahme ist etwas, von dem man annimmt, dass es nie vorkommt. Das kann z.B. sein, dass ein Stecker bei ner Übertragung plötzlich abgeht, oder dass irgendwer mit nem Hammer auf die Festplatte haut, wenn gerade was gelesen werden soll!
Die Interaktion mit dem Nutzer ist keine Ausnahme und auch nicht das Verhalten des Nutzers.
-
ne exception is würd ich sagen nichts, was fast nie vorkommt, sondern etwas was im "normalen" Programmablauf nicht vorkommen sollte..man könnte ja das Programm schreiben ohne überhaupt darauf einzugehen , daß der User ne Zahl außerhalb von 0 und 3 eingeben könnte und es würde bei "richtiger" Bedienung auch alles funktionieren
[ Dieser Beitrag wurde am 04.07.2003 um 13:25 Uhr von crass editiert. ]
-
Ich verstehe fast alles was ihr meint, nur eines nicht.
Cengiz meinte "...fang sie nicht gleich wieder selbst auf sondern lass sie an die aufrufende Stelle weiterreichen."
Wer ist in diesem Fall die aufrufenden Stelle?
erste.choosenumber(); ?Und wenn ja, genau da möchte ich ja eben kein try-catch Konstrukt haben.
Oder wie sollte ich das dann realisieren?Habe übrigens die Exception durch while ersetzt, wäre dennoch Dankbar für eine Antwort was dass "auffangen" angeht.
Danke[ Dieser Beitrag wurde am 04.07.2003 um 14:10 Uhr von Freak editiert. ]
-
Wer ist in diesem Fall die aufrufenden Stelle?
erste.choosenumber(); ?jo
Und wenn ja, genau da möchte ich ja eben kein try-catch Konstrukt haben.
wieso nicht? Abgesehen von der Frage ob es sinnvoll ist, in dem Fall mit Exceptions vorzugehen, seh ich da kein Problem drin
Oder wie sollte ich das dann realisieren?
hier bißchen COde, hoffe selbsterklärend:
class WrongInputException extends Exception //.... //in main: while(true) try{erste.choosenumber();break;} catch(WrongInputException wie) { System.out.println("Eingabe muß zwischen 1 und 3 sein"); }
zum Beispiel..
-
Joo, der Code ist selbsterklärend.
Ich möchte das try-catch Konstrukt nicht in meiner main methode haben, weil ich mich gerade dazu zwinge stark Objektorientert zu programmierenm, bzw. dies zu lernen, da ich ein fanatischer Basic-Spaghetticode anhänger war *shameonme* ;).
Und ich dachte mir das es sinnvoll ist, und der Quellcode besser lesbarer, wenn die try-catch Konstrukte in den einzelnen Methoden/Klassen behandelt werden und die main Methode nur noch ganz normale "Methodenaufrufe" tätigen muss.
Vor allem bei grösseren Projekten dürfte dies doch der Übersichtlichkeit dienen oder?
Freaky
-
Bei größeren Projekten wird die main in der Regel nur dazu genutzt einige Erstinitialisierungen vorzunehmen. Anschließend wird man ein Objekt, das deine Applikation repräsentiert erzeugt werden und das Programm nimmt seinen Lauf (Avalanche-Effekt). Die main muss hier also nicht der ausschlaggebende Punkt sein.