Java Warum gibt diese Rechnung / dieser Code 0 aus?

MeandXP

Ensign
Registriert
Juli 2009
Beiträge
171
Moinsen,

Habe mal ein bisschen mit Java herumexperimentiert um mich mit den Klassen vertraut zu machen. Herauskam folgender Code, der, obwohl den variablen Werte übergeben werden, 0 ausgibt.
Hab wahrscheinlich ein Brett vor'm Kopf aber ich find den Fehler einfach nicht!
Code:
class CCalculator {
	int p_number1;
	int p_number2;
	static int p_ergebnis;
	
	CCalculator (int number1, int number2) {
		p_number1 = number1;
		p_number2 = number2;
		
	}
		void Calculate_exec () {
		p_ergebnis = p_number1 * p_number2;
			
		}
		static void CErgebnis_Ausgabe () {
			System.out.println("Das Ergebnis ist: " + p_ergebnis);
		}
}


public class CCalculate {

	
	public static void main(String[] args) {
		new CCalculator(3,5);
		CCalculator.CErgebnis_Ausgabe();

	}

}

Hoffe ihr könnt mir helfen, MeandXP.

Edit: Warum müssen die Variable p_ergebnis und die Funktion CErgebnis_Ausgabe vom Typ static sein?
 
genau, in der CErgebnis_Ausgabe muss die methode erstmal ausgeführt werden

@meand, ja war vorhin zu schnell mitm überfliegen ^^
 
Kann es sein dass die Funktion Calculate_exec() gar nicht aufgefufen wird? Das Programm gibt doch nur den initialisierten Wert von p_ergebnis, in diesem Falle 0 aus.

EDIT: Zu spät
 
@ wow4ik: -.- -.- EiEiEi ohne Rechnung kein Ergebnis, das sehe ich ein ;) -.- -.-

@ max2k3: warum?
 
Code:
class CCalculator {
	int p_number1;
	int p_number2;
	int p_ergebnis;
	
	CCalculator (int number1, int number2) {
		p_number1 = number1;
		p_number2 = number2;
		
	}
		void Calculate_exec () {
		p_ergebnis = p_number1 * p_number2;
			
		}
		void CErgebnis_Ausgabe () {
			System.out.println("Das Ergebnis ist: " + p_ergebnis);
		}
}


public class CCalculate {

	
	public static void main(String[] args) {
		CCalculator  calc = new CCalculator(3,5);
calc.Calculate_exec ();

		calc.CErgebnis_Ausgabe();

	}

}

versuchs mal so

EDIT: erklaerung:

Die variable p_ergebnis muss bei dir statisch sein das nur statische variablen in statischen methoden (in deinem fall CErgebnis_Ausgabe) aufgerufen werden koennen.

Du hast zwar richtig initalisiert, jedoch arbeitest du nicht mehr mit der instanz sondern nur mehr mit den statischen werten.

Dein object existiert schon nicht mehr, als du versuchst das ergebniss auszugeben.

EDIT2: wieder auf static umgebaut, sollte so acuih gehen.
 
Zuletzt bearbeitet:
dein aufruf is falsch, und die variablen und funktionen dürfen nicht static sein, dass er da meckert liegt an deinem flaschem aufruf, der muss so aussehen:

CCalculator calc = new CCalculator(3,5);
calc.CErgebnis_Ausgabe();

Edit: zu lahm gewesen ....
 
-_-

Solltest vlt. mal auch "Calculate_exec()" aufrufen...
 
Ebicola schrieb:
dein aufruf is falsch, und die variablen und funktionen dürfen nicht static sein, dass er da meckert liegt an deinem flaschem aufruf, der muss so aussehen:


CCalculator calc = new CCalculator(3,5);
calc.CErgebnis_Ausgabe();

Edit: zu lahm gewesen ....


dann fehlt doch immer noch
calc.Calculate_exec ();

zwischen den zwei befehlen?
 
olampl hat es fast richtig.

der hauptfehler war,d ass du nie eine instanz denier klasse erzeugt hast. mach das static vor CErgebnis_Ausgabe und vor p_ergebnis weg!

das musste zuvor static sein, damit darauf zugegriffen werden kann obowhl keine instanz der klasse erzeugt wurde.

im code von olampl fehlt aber noch etwas:
und zwar muss irgendwo mal Calculate_exec() asugeführt werden. entweder in deiner ausgabefunktion oder in der main, bevor die ausgabefunktion aufgerufen wird.
 
wow4ik schrieb:
dann fehlt doch immer noch
calc.Calculate_exec ();
danke, eben auch gesehen

EDIT: Bei der Version mit dem Statischen ergebnis, hast du nun das Problem das alle instanzen das gleich ergbniss haben,
static = eine Klassenvariable/methode , besser in deinem fall ist wohl eine instanzvariable...
 
Das mit dem CCalculator calc = new CCalculator(3,5) habe ich (zuerst) probiert aber eclipse hat einen Fehler angezeigt und mir die Version vorgeschlagen die ich gepostet habe, und dann gemeckert das alles static sein muss. Programm läuft jetzt, werde das mit dem static aber noch ändern.

BTW: Eigentlich hat es aber keinen Sinn Diese Rechenoperation so darzustellen, geht ja auch einfacher, aber zum Üben....
Die Vorlage stammt aus einem Buch, allerdings haben die da Mitarbeiter verwaltet wo das mit dem new deutlich mehr sinn macht!

Edit: Das Prog sieht jetzt so aus und funzt:
Code:
class CCalculator {
	 int p_number1;
	 int p_number2;
	 int p_ergebnis;
	
	CCalculator (int number1, int number2) {
		p_number1 = number1;
		p_number2 = number2;
		
	}
		 void Calculate_exec () {
		p_ergebnis = p_number1 * p_number2;
			
		}
		 void CErgebnis_Ausgabe () {
			System.out.println("Das Ergebnis ist: " + p_ergebnis);
		}
}


public class CCalculate {

	
	public static void main(String[] args) {
		
		CCalculator calc = new CCalculator(3,9);
		calc.Calculate_exec();
		calc.CErgebnis_Ausgabe();

	}

}

Danke an alle Helfer für die Entfernung des gewaltig großen Bretts ;) !

mfg, MeandXP.
 
Zuletzt bearbeitet:
Auch wenn du (offenbar) mit Java gerade erst anfängst, solltest du dir mal anschauen, was es mit public, protected, private und package auf sich hat. Die sind beim Geheimnisprinzip, der Vererbung und Polymorphismus später extrem wichtig.

An die Sichtbarkeiten zu denken, hilft später sehr bei der Programmierung.
 
Und gewöhn dich gleich auch daran, dass Methodennamen laut Konvention in Java mit einem Kleinbuchstaben anfangen sollten und dann jedes neue Wort mit einem Großbuchstaben (also beispielsweise calculateExec)! Gleiches gilt für Variablen.
 
Zurück
Oben