rückwärtszaehler

Shakra

Aktives Mitglied
Hallo zusammen
zur Übung versuche ich seit ein paar stunden ein ganz billiges "rückwertszaehler" zu schreiben aber ich bekomme es einfach nicht hin..

Hier ist der code:
Java:
public class rückwertsZaehler {
float i;
	float zaehler(float zahl)
	{for(i=zahl; i>1; i = i/2);
	{System.out.println(i);
	return i;}
	}
	
	

	
	public static void main (String[] args)
	{rückwertsZaehler rück = new rückwertsZaehler();
	rück.zaehler(100.0f);
	}
	}

Die ausgabe soll so aussehen: 100 50 25 12,5 usw. bis i>1 erfüllt ist.
Bei der code kommt aber als ergebnis einfach nur 0.78125 raus..

Und warum funktioniert eig. return System.out.println(i); nicht?
 
Zuletzt bearbeitet von einem Moderator:

diggaa1984

Top Contributor
das semikolon hinter der for-schleife ist zuviel

edit: willst du den wert den du returnst später noch verwenden? so hat er erstmal keine verwendung weiter. Und das du System.out.println(i) nicht returnen kannst, liegt daran, dass println(i) kein entsprechenden Rückgabewert hat, daher ist das inkompatibel mit dem von dir angegebenen float
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ich habe mir erlaubt den Titel von etwas nichtssagenden zu etwas charakteristischen zu ändern,
und da du dieses wichtige Wort, gar dein Klassenname, unentwegt falsch schreibst, hier extra ein Hinweis ;)

mit ä bzw. ae
 

Shakra

Aktives Mitglied
Wenn ich aber den semikolon entferne, bekomme ich 2 fehler meldungen: einmal für zeile 3: This method must return a result of type float
und für zeile 4: dead code
 

faetzminator

Gesperrter Benutzer
Du brauchst keinen Return type - bzw. [c]void[/c]:
Java:
void zaehler(float zahl) {
    for(int i = zahl; i > 1; i = i/2) {
        System.out.println(i);
    }
}
Die Instanzvariable [c]i[/c] kannst du dann auch entfernen.
 

VfL_Freak

Top Contributor
Moin,

(a) das obsolete Semikolon beendet Deine for schleife sofort an der Stelle !!!

Wenn ich aber den semikolon entferne, bekomme ich 2 fehler meldungen: einmal für zeile 3: This method must return a result of type float
und für zeile 4: dead code


(zu Zeile 3) ist ja auch richtig !!
Java:
float zaehler(float zahl)  // hier sagst Du: Rückgabewert FLOAT !!
{
    for(i=zahl; i>1; i = i/2)
    {
        System.out.println(i);
        return i;             // hier gibst Du aber einen Integer zurück !!
    }
}
Warum mischt Du denn hier überhaupt float und integer ???:L

Und wo genau kommst was mit "Dead Code" ???:L

Gruß
Klaus
 

Shakra

Aktives Mitglied
Hmm..also jetzt funktioniert das ganze aber jetzt habe ich eine ganz grundlegende frage:
Wann benutze ich void und wann return?
Also mit void wird nichts zurückgegeben oder? Ich will aber was zurückhaben also habe ich return genommen..das war jetzt meine denkweise aber anscheinend nicht so ganz richtig..

"Warum mischt Du denn hier überhaupt float und integer"
Ich habe überhauptkeine int variable deklariert..i ist auch ein float typ..
 

xjCoder

Aktives Mitglied
Wenn ich aber den semikolon entferne, bekomme ich 2 fehler meldungen: einmal für zeile 3: This method must return a result of type float
und für zeile 4: dead code

Der "Dead Code" dürfte wohl beim Hochzählen in der for-Schleife auftauchen, da diese
Anweisung nie ausgeführt werden kann wenn bereits im ersten Durchlauf ein
Code:
return
auftaucht.
 
Zuletzt bearbeitet:

HimBromBeere

Top Contributor
Einen return hast du eigtl. immer, nur manchmal ist das implizut dadurch gegeben, dass die Methode sowieso am Ende ist. Void ist - wie du bereits richtig geschrieben hast - der Rückgabetyp für "keine Rückgabe" (klingt irgendwie seltsam, jetzt wo ich das schreibe). Innerhalb einer mit void deklarierten Methode brauchst du nur dann eine return-Anweisung, wenn du irgendwo "mittendrin" bereits die Funktion verlassen willst (etwa durch das vorzeitige Erreichen eines Zielzustandes). Das wird aber zumeist als eher unsauber bezeichnet und sollte weitgehend vermieden werden.

Return heißt erstmal nur das, was es bereits andeutet: kehre zurück. Sollte dahinter noch irgendwas stehen, wird dieser Wert zurückgegeben, ansonsten (sofern der Rückgabetyp void ist und NUR dann) einfach nichts. Der Wert der Return-Anweisung muss dabei den selben Datentyp aufweisen wie deine Methode, in deinem Fall also float.

[EDIT]Kleiner Hinweis noch: Klassennamen werden groß, Variablennamen klein geschrieben, beiden gemein ist aber, dass Umlaute zu vermeiden sind. In deinem Fall:
Java:
public class Rueckwertszaehler {
...
}
[/EDIT]
 
Zuletzt bearbeitet:

timbeau

Gesperrter Benutzer
Aber ein auch return-Wert muss verarbeitet werden.

Wenn du eine Methode hast die "Hallo" zurückgibst und du nur
Java:
halloMethode();
aufrufst passiert nicht, der RückgabeWert verschwindet im Nirvana
 

Oben