Es sollte ein Programm geschrieben geschrieben werden, dass eine Zahl durch Konsoleneingabe einliest und diese in die entsprechende Binärzahl konvertiert und wieder ausgibt. Mit dem gegebenen Programmgerüst sieht meine Lösung so aus:
Java:
importjava.io.*;importjava.lang.*;classTastaturIn{privateInputStreamReader is=newInputStreamReader(System.in);privateBufferedReader eingabe=newBufferedReader(is);/*Liest einen Wert von der Konsole ein
und gibt diesen als int-Wert zurueck. Im Fehlerfall wird eine
IOException geworfen */publicintreadInt()throwsIOException{String zeile;int wert=0;
zeile=eingabe.readLine();
wert=(newInteger(zeile)).intValue();return wert;}/*Liest einen Wert von der Konsole ein
und gibt diesen als String zurueck. Im Fehlerfall wird eine
IOException geworfen */publicStringreadString()throwsIOException{String zeile="";
zeile=eingabe.readLine();return zeile;}}publicclassBinCalc{publicstaticStringDec2Bin(int dec){//Ihre LoesungString r=Integer.toBinaryString(dec);return r;}publicstaticvoidmain(String args[]){//Ihre Loesungint d;String res;System.out.println ("Dezimalzahl: ");
d=newTastaturIn().readInt();
res=newBinCalc().Dec2Bin(d);System.out.println ("Binaerzahl: "+res);}}
Beim Kompilieren jedoch bekomme ich die Fehlermeldung:
BinCalc.java:46: unreported exception java.io.IOException; must be caught or declared to be thrown
d=new TastaturIn().readInt();
Jetzt hab ich bei Google schon was zu try/catch gefunden, allerdings denke ich mal, dass sich der Fehler auch einfacher beheben lässt. Hat da jemand einen Vorschlag?
Edit: Die Klasse TastaturIn darf nicht verändert werden.
Richtig, du musst einen try-catch Block drum machen und im Fehlerfall etwas nach deinen Wünschen machen. Z.B. eine [c]RuntimeException[/c] weiterwerfen oder [c]-1[/c] zurückgeben. Du kannst allerdings auch gleich die IOException weiterwerfen ([c]throws IOException[/c]), dann muss aber der Aufrufer diese Handeln - z.B. mit einer Fehlermeldung und wiederholter Eingabe.
Wenn eine Exception geworfen wird, muss die entweder behandelt (try catch - noch einfacher gehts nimmer) oder weitergeworfen (throws im Prozdurheader) werden, was auch sehr einfach ist, aber den "Nachteil" hat, dass man im aufrufenden Kontext wieder dieselbe Meldung des Kompilers zu sehen bekommt.
EDIT: na ja, wieder zu lange getippselt
Es lohnt sich darüber nachzudenken WARUM die Exception auftritt (der User hat wohl etwas anderes als eine Zahl eingetippt)
Was soll man dann machen? Hm, ich würde mal vorschlagen dem User eine aussagekräfitge Meldung anzuzeigen und zu nochmals einen Leseversuch zu starten.
Ich hab jetzt einfach die Exception weiterwerfen lassen und es funktioniert, war ja nirgends die Aufgabe damit umzugehen, bzw. die zweite Teilaufgabe war eh, dass man schauen sollte was passiert, wenn man statt einer Zahl etwas anderes eingibt.