error: illegal start of expression

richrich99

Mitglied
Kann mir jemand sagen was ich vergessen habe ?
Java:
public static void main(String[]args){

System.out.println(theAnswer(10));}

public static String theAnswer(int input){
    
if (input % 7 == 0 && % 3 == 0)
{System.out.println("42");}
else if (input % 3 == 0)
{System.out.println("bar");}
else if (input % 7 == 0)
{System.out.println("foo");}
else
{System.out.println(input);}

return input;}

                   }
 
Ja jetzt klappt fast alles ich hab nur noch das Problem , dass er mir den Wert zweimal angibt
Ich weiss nicht, was Du genau geändert hast. Aber in der Methode theAnswer ermittelst Du nur die Antwort und gibst diese nicht aus. Da darf daher kein System.out.println sein.

Wenn dieser Rateversuch falsch ist, dann zeig einfach einmal deinen aktuellen Code.
 
Hm, da 10 weder durch 3 noch durch 7 teilbar ist, gibst du die Zahl einmal hier
Java:
else
{System.out.println(input);}
und einmal hier
Java:
System.out.println(theAnswer(10));}
aus.
 
Die Klammer bei Zeile 18 gehört zur Klasse aussenrum?
Weil ansosnten ist die überflässig.
Und wie gesagt wurde, anstelle von System.out.println(...) müsstest du return benutzen.
println druckt ja nur Sachen auf die Konsole, das hat nichts mit dem Rückgabewert der Methode zu tun.
 
bei mir wird jetzt der wert doppelt ausgegeben also wenn ich 3 schreibe dann gibt er mir den String und die Zahl 3 aus.
Java:
public static void main(String[]args){

System.out.println(whatsTheAnswer(21));}

public static int theAnswer(int input){

if (input % 7 == 0 && input % 3 == 0)
{System.out.println("50");}
else if (input % 3 == 0)
{System.out.println("ber");}
else if  (input % 7 == 0)
{System.out.println("goo");}
else
{System.out.println(input);}

return input;






}

                   }
 
Ja, was soll denn die Methode theAnswer machen? Das soll doch nur die Antwort für eine Zahl ermitteln. Also was ich geschrieben habe:

Aber in der Methode theAnswer ermittelst Du nur die Antwort und gibst diese nicht aus. Da darf daher kein System.out.println sein.

Also schmeiß alle println Aufrufe in der Methode raus. Und dann gib die Antwort zurück. Und die war am Anfang schon mit korrektem Rückgabetyp. Der Hinweis bezüglich
Außerdem gibt die Methode einen int und keinen String zurück
sollte Dir sagen: Derzeit gibt die Methode mit dem return input; einen int zurück. Die Methode soll einen String zurück geben. Also musst Du da beim return auch einen String angeben.

Also noch ein Gedankengang mehr: Wenn die Methode nicht "42", "bar" oder "foo" ausgeben soll: Was soll sie genau machen?

Da also - wie immer - der ganz wichtige Ratschlag: Überlege Dir in Worten genau, was die Methode machen soll. Du musst die Funktionalität im Detail verstanden haben. Und da sind Details wichtig. Es ist halt ein Unterschied zwischen:
a) "bar" ausgeben
b) "bar" zurück geben
 
bei mir wird jetzt der wert doppelt ausgegeben also wenn ich 3 schreibe dann gibt er mir den String und die Zahl 3 aus.
Ja, das hast du oben schon mal geschrieben und die Antworten hast du bekommen.

Was erwartest du? Immer, wenn du System.out.println() schreibst, wird etwas ausgegeben und jetzt schau dir doch mal deinen Code an, an welchen Stellen du das tust.
 
Zuletzt bearbeitet:
Vermische/verwechsle nicht "Rückgabe" mit "Ausgabe am Bildschirm".

Methoden, die das Ergebnis einer Auswertung liefern, sollten nie etwas am Bildschirm ausgeben (ausgenommen Logging, aber das ist ein anderes Thema).
 
Vermische/verwechsle nicht "Rückgabe" mit "Ausgabe am Bildschirm".
Vielleicht hilf es dir, das noch einmal zu verdeutlichen. Hier dein Code, mal ordentlich eingerückt.
Java:
public static int theAnswer(int input) {
    if (input % 7 == 0 && % 3 == 0) {
        System.out.println("42"); // Ausgabe auf der Konsole
    } else if (input % 3 == 0) {
        System.out.println("bar"); // Ausgabe auf der Konsole
    } else if (input % 7 == 0) {
        System.out.println("foo"); // Ausgabe auf der Konsole
    } else {
        System.out.println(input); // Ausgabe auf der Konsole
    }
 
    return input; // Rückgabe des Parameterwertes
}

Du deklarierst eine Methode theAnswer() mit einem Rückgabewert vom Typ int: public static int theAnswer(int input).

Die Rückgabe dieses Wertes erfolgt an dieser Stelle: return input;. Es wird also der Wert des Parameters input zurück gegeben. Alleine auf diesen Rückgabewert bezogen, könnte dein Code stark verkürzt werden:
Java:
public static int theAnswer(int input) {
    return input;
}

Alles dazwischen gibt abhängig vom input unterschiedliche Dinge auf der Konsole aus, ändert aber nichts am Wert von input und damit natürlich auch nichts an dem Rückgabewert.


In der main() wird der von der Methode zurück gegebene Wert noch einmal ausgegeben: System.out.println(theAnswer(10));
 
Zuletzt bearbeitet:

Zurück
Oben