objektmethode,klassenmethode

Ich

Mitglied
gegeben ist das folgende programm:


Java:
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:

Java:
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?
 

Marco13

Top Contributor
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

Mitglied
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();
		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

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

Ich

Mitglied
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

Top Contributor
Namen sind Schall und Rauch ;)

Code:
        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

Mitglied
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 ;)

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();
		endlosschleife.liesZahl();
		int j=0;
		while (true) {
			j = endlosschleife.liesZahl();
			System.out.println("eingegebene Zahl:" + " " + j);
			if (j==5) break;
		}
	}
}
 

Murray

Top Contributor
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

Mitglied
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

Top Contributor
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.
 

Neue Themen


Oben