Zaehlerstand:0 j
Zaehlerstand:1 j
Zaehlerstand:2 n
Zaehlerstand:1 .......
je nachdem, ob der Benutzer j oder n eingibt, soll die Zahl erhöht bzw. erniedrigt werden!
Ich komm aber einfach nicht auf den Fehler drauf!
Bitte um Hilfe!
Glaub der Fehler liegt im BufferedReader!...oder in der Schleife!
Code:
public class Zaehler{
private int number;
public int getNumber(){
return number;
}
public void erhoehe(){
++number;
}
public void senke(){
--number;
}
}
import java.io.*;
public class Zaehlertest {
private Zaehler z;
public Zaehlertest() {
z = new Zaehler();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = "";
do {
System.out.print("Zaehlerstand: " +z.getNumber() + ", (j/n/e)? ");
try {
s = br.readLine();
}
catch(IOException ioe){}
if(s.equals("j"))
z.erhoehe();
else if(s.equals("n"))
z.senke();
}
while(!s.equals("e"));
}
public static void main(String[] args) throws IOException {
Zaehlertest zt = new Zaehlertest();
}
}
Code:
public class Zaehler {
private int number;
public Zaehler() {
number = 0;
}
public int getNumber() {
return number;
}
public void erhoehe() {
number++;
}
public void senke() {
number--;
}
}
Man kann es auch in der main()-Methode laufen lassen. Allerdings entspricht dann diese Klasse nicht mehr der OOP.
Man kann sie nicht wieder verwenden bzw. instanzieren und in ein anderes Programm mit einbauen.
Außerdem wird sie unübersichtlich, wenn etwas dazu kommt bzw. Du die Klasse erweiterst.
Ich habe meine Version Deines Codes nochmals leicht modifiziert. Siehe oben.
Du arbeitest doch innerhalb der Methoden der Klasse Zaehler mit einer Instanzvariablen. Wenn man ein Objekt einer Klasse erzeugt, setzt man meistens bestimmte Variablen auf Anfangswerte. In diesem Fall eben "0", weil der Zähler bei 0 anfangen soll zu zählen. Es stimmt, in diesem Fall müsste das nicht sein, weil eine Instanzvariable vom Typ int vom Compiler automatisch mit 0 initialisiert wird.
Sindbad1983 hat gesagt.:
aber wozu braucht man dann noch
Zaehlertest zt = new Zaehlertest(); ??
Damit erzeuge ich eine Instanz der Klasse Zaehlertest. Im Prinzip wird nur ihr Konstruktor aufgerufen, der dann alles nötige abarbeitet. Wenn das Programm um Funktionalität wachsen soll, müsste das geändert werden.
Bei kleinen Klassen mag eine Implementation des Programmes in der main()-Methode noch übersichtlich erscheinen.
Sobald Du aber mehrere Klassen und Methoden verwenden willst, die auch noch gegenseitig miteinander kommunizieren, wirds schwierig bzw. unmöglich.
import java.io.*;
public class Zaehlertest {
...
public Zaehlertest() {
z = new Zaehler();
......
try {
s = br.readLine();
}
catch(IOException ioe){}
......
public static void main(String[] args) [b]throws IOException [/b]{
Zaehlertest zt = new Zaehlertest();
}
}
Warum braucht man das IOException bei der main-Methode?
Warum funktioniert das Folgende nicht?
throws dient dazu anzuzeigen, dass eine Methode eine bestimmte Exception werfen kann.
Dabei muss aber keine try-catch-Behandlung in der Klasse gemacht werden. Dann gibt die Methode die Exception weiter, an die aufrufende Instanz/Methode, die dann ihrerseits die Exception behandeln oder ebenfalls weiter leiten muss.
wenn ich ein Programm schreib, dann vergiss ich das Verwenden von Exceptions meistens!
Denn wann weiß ich, dass eine Methode eine bestimmte Exception werfen kann? Und welche Exception?
oder wann verwendet man try...catch? oft gehts auch ohne! :-(