# objektmethode,klassenmethode



## Ich (12. Jan 2011)

gegeben ist das folgende programm:



```
public class Aufgabe4 {

	
	//Objektmethode
	public int liesZahl () {
		int i = util.StdInput.readInt("Ganzzahl eingeben:");
		return i;
	}
	
	//Klassenmethode
	public static void main(String[] args) {
		
		int i= liesZahl(); //int i=liesZahl() eingefuegt
		while (true) {
			int i = util.StdInput.readInt();
			System.out.println(i);
			if (i==5) break;
		}
	}
}
```

nun soll ich das programm so abaendern, dass die instanzenmethode lieszahl verwendet wird. das hab ich wie folgt gemacht:


```
import util.StdInput; 

public class Aufgabe4 {

	
	//Objektmethode
	public static int liesZahl () { //static eingefuegt
		int i = util.StdInput.readInt("Ganzzahl eingeben:");
		return i;
	}
	
	//Klassenmethode
	public static void main(String[] args) {
		
		int i= liesZahl(); //int i=liesZahl() eingefuegt
		while (true) {
			//int i = util.StdInput.readInt();
			System.out.println("eingegebene Zahl:" + " " + i);
			if (i==5) break;
		}
	}
}
```
 so laeuft es auch, aber meine frage ist:
das eingefuegte static oben bezieht sich doch jetzt auf ein objekt. muss ich das jetzt noch erzeugen? in der main?


----------



## eRaaaa (12. Jan 2011)

Du bringst hier ein wenig durcheinander, static bedeutet gerade, dass es nicht zu einem Objekt, sondern zu der Klasse gehört !!! (nichts mit Instanz!!!) 

Und ja, du musst ein Objekt mit new erstellen dann, lies aber noch einmal : http://www.java-forum.org/stichwort-static/1353-bedeutet-static.html


----------



## Marco13 (12. Jan 2011)

static bedeutet eben gerade, dass es NICHT Instanz- sondern Klassenbezogen ist (gibt auch einen FAQ-Eintrag dazu). Mach' das static weg, und erstelle ein Objekt (eine Instanz) der Klasse "Aufgabe4", auf dem du die Methode dann aufrufst.


----------



## Ich (12. Jan 2011)

```
import util.StdInput; 

public class Aufgabe4 {

	
	//Objektmethode
	public int liesZahl () {
		int i = util.StdInput.readInt("Ganzzahl eingeben:");
		return i;
	}
	
	//Klassenmethode
	public static void main(String[] args) {
		
		Aufgabe4 endlosschleife = new Aufgabe4();
		endlosschleife.liesZahl();
		while (true) {
			//int i = util.StdInput.readInt();
			System.out.println("eingegebene Zahl:" + " " + i);
			if (i==5) break;
		}
	}
}
```
danke!
ich habe nun das static wieder rausgenommen und in der klassenmethode ein neues objekt erzeugt. jetzt bemaengelt er allerdings, dass er in der klassenmeth. das i nicht mehr einer variablen zuweisen kann. es ist doch schon richtig, dass ich das zweite eingeben einer zahl ueber die tastatur nicht mehr in der main brauche, wenn ich es doch in der lieszahl methode habe?
danke fuer eure hilfe.


----------



## Marco13 (12. Jan 2011)

VOR der Schleife ein 'int i;' deklarieren, und IN der Schleife den Rückgabewert von endlosschleife.liesZahl() diesem i zuweisen.


----------



## Ich (12. Jan 2011)

ok. das hat mir schonmal weitergeholfen. aber der rueckgabewert der methode liesZahl ist doch i. und wie weise ich meinem int i jetzt nochmal das i zu? ich steh aufm schlauch...


----------



## Marco13 (12. Jan 2011)

Namen sind Schall und Rauch 


```
public int liesZahl () {
		int i = util.StdInput.readInt("Ganzzahl eingeben:"); [b]// Dieses 'i' hier...[/b]
		return i;
	}
	
	public static void main(String[] args) {
		
		Aufgabe4 endlosschleife = new Aufgabe4();
		int i = 0;  [b]// ,...ist ein anderes 'i' als das hier (du könntest das hier auch 'j' nennen ...)[/b]
 
		while (true) {
			i = endlosschleife.liesZahl();
			System.out.println("eingegebene Zahl:" + " " + i);
			if (i==5) break;
		}
	}
}
```


----------



## Ich (12. Jan 2011)

syntaktisch ist das ja nun korrekt. aber es tut nicht das, was es soll... es soll nach der eingabe eine endlosschleife ablaufen.... es sei denn, meine eingabe ist 5. dann geht er erst gar nciht in die endlosschleife.
das tut es nicht. ich bin wohl echt ein schwieriger fall 


```
import util.StdInput; 

public class Aufgabe4 {

	
	//Objektmethode
	public int liesZahl () {
		int i = util.StdInput.readInt("Ganzzahl eingeben:");
		return i;
	}
	
	//Klassenmethode
	public static void main(String[] args) {
		
		Aufgabe4 endlosschleife = new Aufgabe4();
		endlosschleife.liesZahl();
		int j=0;
		while (true) {
			j = endlosschleife.liesZahl();
			System.out.println("eingegebene Zahl:" + " " + j);
			if (j==5) break;
		}
	}
}
```


----------



## Murray (12. Jan 2011)

Ich bin mir nicht sicher, was Du wirklich vorhast, aber der erste Aufruf von liesZahl ist ziemlich sinnlos, da der Rückgabewert  überhaupt nicht ausgewertet wird. Daher wird jetzt eine Zahl eingelesen, mit der nichts passiert. Dann wird wieder eine Zahl eingelesen und ausgegeben. War diese Zahl 5, dann passiert nichst weiter. War die Zahl aber nicht 5, dann wird wieder einen zahl eingelesen und ausgegeben usw.


----------



## Ich (12. Jan 2011)

es soll ein kleines progamm rauskommen, dass eine endlosschleife ist. wenn man eine zahl ueber die tastatur eingibt, dann gibt er sie als endlosschleife aus. also unendliche viele male dann diese zahl. ist meine eingegebene zahl jedoch die 5, dann soll er die 5 nur einmal ausgeben und die endlosschleife findet ueberhaupt nicht statt. was mein problem nun allerdings ist, dass die endlosschleife nicht ablaeuft. und wo ist der haken bei meinem code? ich finde ihn nicht. wisst ihr da weiter? das eben ein prgm rauskommt, dass genau das macht, was ich eben beschrieben hatte? danke schonmal.

[Java]import util.StdInput; 

public class Aufgabe4 {


	//Objektmethode
	public int liesZahl () {
		int i = util.StdInput.readInt("Ganzzahl eingeben:");
		return i;
	}

	//Klassenmethode
	public static void main(String[] args) {

		Aufgabe4 endlosschleife = new Aufgabe4();

		while (true) {
			int i = endlosschleife.liesZahl();
			System.out.println("eingegebene Zahl:" + " " + i);
			if (i==5) break;
		}
	}
}[/code]


----------



## Marco13 (13. Jan 2011)

Naja... versuch' mal, nachzuvollziehen, was da gemacht wird. Im Moment wäre das, was da steht, in Worten etwa sowas wie
1. Lass' den Benutzer eine Zahl eingeben
2. Gib diese Zahl einmal aus. 
3. Wenn er eine 5 eingegeben hatte, hör' auf mit dem ganzen - ansonsten geh' wieder zur 1.

Was du willst ist
1. Lass den Benutzer eine Zahl eingeben.
2. Wenn die Zahl eine 5 ist, gibt sie aus.
3. Andernfalls (wenn die Zahl KEINE 5 ist) gib sie immer wieder aus.


----------

