Rückgabe der Werte funktioniert nicht

N.Klaas

Mitglied
Hallo allerseits,

ich bin relativ blutiger Anfänger in Java und hab hier und da noch so meine kleinen und großen Problemchen. Gerade bereite ich mich mit Alt-Klausuren auf meine erste Prüfung vor und komme bei einer jedoch nicht so recht weiter.
Wir sollen eine Funktion implementieren die einem immer die Anzahl der Kuchenstücke in Abhängigkeit der Schnitte angibt. Also seien die Schnitte m und die Kuchenstücke x würde das bedeuten:
m=0 -> x=1
m=1 -> x=2
m=2 -> x=4
m=3 -> x=6
usw.

wir sollen den vorgegebenen Methodenkopf verwenden
Code:
 int hoch(int x, int m)
.
Es sollen keine Methoden aus der Klasse Math benutzt werden.
Ich hab mir jetzt folgendes kleines Programm überlegt:
Java:
public class Mathe{		

	int x;			\\Attribute erzeugen (mit Beispielwerten)
	int m = 3;

	int hoch(int x, int m){		\\beginnen Methode mit Parametern
		if(m == 0){		\\Sonderfall m=0 prüfen
			return x = 1,	\\Rückgabe Sonderfall
		} else {	
			for(int i=1; i < m+1; i++){	\\Schleife mit Abbruchbedingung
				x = x+2;		\\Anweisung
			}\\for
		}\\if-else
		return x;				\\Rückgabe
	}\\Methode hoch
	public static void main(String[] args){		
		System.out.println(x);			\\Ergebnis ausgeben
	}\\Methode main
}

Jetzt das Problem. In der Form will er mir das gar nicht erst kompilieren, er hat ein Problem mit meinem System.out.println, warum weiss ich nicht. Lasse ich also den Teil weg, kompiliert er es mir, will es aber nicht ausführen. Wo liegt mein Fehler? Ich bin mir oft nicht sicher, inwiefern meine Attribute außerhalb der Methode gelesen werden können etc.
Dank für eure Hilfe.
Gruß Niklas
 
Hast du im Source auch diese (ich nehme mal an es sind) Kommentare stehen? Da hast du nämlich was verdreht:
Java:
\\ Ich wäre gerne ein Kommentar, bin aber tatsächlich keiner
// Ich bin ein einzeiliger kommentar
/*
 * Ich bin ein mehrzeiliger Kommenatr
 */
/**
 * Ich bin ein Kommentar für Javadocs
 * /

In der main musst du natürlich die Methode hoch aufrufen, sonst ist logisch, dass nichts passiert.
 
Also er sollte eigentlich den Fehler ausgeben, dass x vielleicht nicht initialisiert sein könnte. Deshalb kompiliert er nicht. Dass er es nicht ausführen will, bezweifle ich, nur die Frage ist, was er denn ausführt wenn du den Teil weglässt. Beim Aufruf des Programms führt er ja das aus, was in der main steht. Und soweit ich das hier sehen kann, steht dann da ja gar nichts. Du musst deine Methode "hoch()" ja irgendwo aufrufen, um zu sehen, ob sie funktioniert. Des weiteren gilt doch x = 2m, wenn ich das richtig sehe. ;-)

edit: achja und die Kommentare natürlich.. //
 
Moin,

In der Form will er mir das gar nicht erst kompilieren, er hat ein Problem mit meinem System.out.println, warum weiss ich nicht. Lasse ich also den Teil weg, kompiliert er es mir, will es aber nicht ausführen. Wo liegt mein Fehler? Ich bin mir oft nicht sicher, inwiefern meine Attribute außerhalb der Methode gelesen werden können etc.
Dank für eure Hilfe.

Dein 'x' ist ein Integer-Wert - wandele in mal in einen String um ...

Und da Du Deine Methode 'hoch' nirgendwo aufrufst, wird sie logischerweise auch nicht ausgeführt !

Gruß
Klaus
 
Hi,

warum machst du nicht einfach

Java:
 if(m == 0){    
            return 1,   
        } else {    
            
                return 2*m;     
            }
         return -1;

statt deiner for-Schleife? Oder verhau ich mich da grad?^^
 
@ Klaus,
schau noch mal hin. Das macht nun echt keinen Sinn. Die Ausgabe funktioniert mit dem int.

@ Niklas
Pass auf, du hast ein Member "x" am Anfang der Klasse und ein Argument "x" in deiner Methode. Verwechslungsgefahr!
Nimm lieber eindeutige Namen, das macht die Sache viel leichter (iFaktor, iStuecke, ...).

Und benutzt du eine IDE wie Eclipse oder Netbeans?
Die sollten dich auf die Komentare hinweisen und gleich zeigen, dass da was nicht stimmt.
An sich gibt es auch keinen Grund keine IDE zu benutzen. Sie helfen bei Fehlern, aber den Code muss man schon noch selbst schreiben.
 
Dein 'x' ist ein Integer-Wert - wandele in mal in einen String um ...
Was soll das bringen?

@TO: Was ich komplett übersehen habe: dein x ist keine statische Variable, deswegen kannst du nicht von der main aus direkt darauf zugreifen. Entweder du definierst das x nochtmal in der main oder du setzt ein [c]static[/c] vor das [c]int[/c].
 
Hey, danke für die vielen Antworten. Ja das mit dem Auskommentieren war eher ne Schussel-Fehler. Hab eure Tips probiert so gut wie möglich umzusetzen, hier das Ergebnis.

Java:
public class Mathe{
	
	public Mathe(int x, int m){}
	
	static int hoch(int x, int m){
		if(m == 0){
			return 1;
		}
		for(int i=1; i<m+1; i++){
			x = x+2;
		}
		return x;
	}
	public static void main(String[] args){
		System.out.println(hoch(0, 3));
	}
}

Jetzt noch eine letzte Frage: Wie kann ich in der main Methode (die ja statisch ist) die hoch Methode aufrufen, ohne, dass diese statisch sein muss? Danke nochmal und noch nen schönen Abend.
 

Zurück
Oben