Java <identifier expected>

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

"public" brauchst Du Deine innere Klasse NICHT machen.

Aber wenn der Code wirklich alles sein soll, dann hast Du weder Semikolons richtig gesetzt noch die Funktion "fakultaet" definiert. Genau diese Umstände sollten aus der Fehlermeldung ablesbar sein!

Kiwi123ILU 
Fragesteller
 14.11.2012, 21:48

Ich habe es so gemacht wie der lehrer es an die tafel geschrieben hat... aber es klappt nicht in blueJ.

0
WhiteGandalf  15.11.2012, 01:00
@Kiwi123ILU

Nicht ganz - oder der Lehrer hat seinerseits Flüchtigkeitsfehler gemacht.

Das kommt auch vor. Erst wenn Schüler soweit sind, daß sie die Flüchtigkeitsfehler des Lehrers erkennen können, haben sie den Stoff wirklich geschnallt. Versuche ruhig, dahin zu kommen!

Wie sieht denn nun Deine erste Fehlermeldung GENAU aus?

DU mußt lernen, solche Fehlermeldungen erstens GENAU zu beachten (die sind nicht irgendein dahingerotzter Schnullikeks um Leute zu ärgern, sondern Hilfen, um korrekte Anweisungen zu formulieren)! Und zweitens mußt Du sie natürlich beseitigen, indem Du an Deinem Code Änderungen vornimmst!

Ich gebe mal eine Vorlage...

0
WhiteGandalf  15.11.2012, 01:28
@WhiteGandalf

Der Code, von dem Du behauptest, ihn so geschrieben zu haben, kann von vornherein gar nicht erst in der von Dir behaupteten Zeile seinen ersten Fehler werfen. Er ist schon von Anfang an unzulässig.

WENN also in Deinem TATSÄCHLICHEN Code TATSÄCHLICH der ERSTE Fehler an der Stelle kommen sollte, die Du hier berichtest, dann lautet Dein TATSÄCHLICHER Code mindestens vom Prinzip her in etwa so:

public class Kiwi123ILU_wahrscheinlicher_code
{
    public void test(int n)
    {
        class Funktion
        {
            long ergebnis;
            Funktion f = new Funktion();
            ergbnis=f.fakultaet
            System.out.println("Ergebnis:"+n+"!"+ergebnis);
        }
    }
}

Erkennst Du den Unterschied?

====================

In Java muß immer um alles eine Rahmenklasse gelegt werden! Oder mit anderen Worten: Es muß in Java immer alles in Klassen verpackt werden!

Ich gehe davon aus, daß Du das in Deinem Code nicht korrigieren mußt, sondern als Hinweis verarbeiten mußt, SAUBER und SORGFÄLTIG Deine Fragen zu formulieren, weil man im Gewerbe des Programmierens nicht einfach mal irgendwas nach Lust und Laune weglassen kann, ohne die Funktion und Bedeutung zu ändern.

AUSSER Leerzeichen, Tabulatoren und Zeilenvorschübe.

====================

Danach kommt auch bei mir tatsächlich der erste Fehler in der von Dir beschriebenen Zeile. Und der lautet so (DAS sollte EIGENTLICH VON DIR(!) beschrieben werden!):

<identifier> expected
        ergbnis=f.fakultaet
               ^

Bei Deinem BlueJ sollte die Fehlermeldung IDENTISCH sein, denn Dein BlueJ benutzt den identischen Compiler.

Du erkennst hoffentlich, daß dort ein kleines "Pfeilchen" herumhängt (^) und auf ein ganz bestimmtes Zeichen in der Zeile drüber zeigt! Guck genau hin und mache Dir diese Bedeutung dieses in diesem Fall ALS PFEIL BENUTZTEN Zeichens klar!

Ein "Identifier" ist ein NAME für eine Variable, einen TYP (Klasse) oder eine Funktion.

  • Der FEHLT (!) dem Compiler hier.
  • Warum? Da steht doch einer! Oder?
  • WAS GENAU (!) steht da als Name der Variablen?!!
  • Guck nochmal GENAU (!) hin!

Ja, Du hast FLÜCHTIG gearbeitet. Du bist davon ausgegangen, daß der Java Compiler ungefähr mindestens genauso intelligent mitdenkend und tolerant ist wie ein wohlmeinender GuteFrage-Helfer oder ein netter Lehrer, der Dir das Gegenteil beizubringen versucht.

Macht nichts: Man kann sich ja bessern!

  • Korrigiere diesen Fehler so, daß der Name der Variablen KORREKT ist!
  • Mache nochmal einen Compilationsversuch!
  • Stelle fest, daß dieser Fehler "verschwunden" ist!
  • Stelle fest, daß der nächste Fehler gleich auf dem Fuße folgt. In derselben Zeile.
  • Lese DIR SELBST (!) ZUERST - bevor Du die nächste Frage hier dran hängst - den Wortlaut dieser Fehlermeldung GENAU (! - ohne Flüchtigkeit bitte und so tralala was gehts mich an-Mentalität!) durch!
  • Beachte, daß es WIEDER so einen komischen "Pfeil" gibt! Der WIEDER auf eine bestimmte Stelle in der Zeile drüber zeigt!
  • Zähle eins und eins zusammen und korrigiere den Fehler, der Dir geradezu WÖRTLICH EXAKT eine Anweisung gibt, was Du zu machen hast!

So, und nach DIESEM Verfahren gehst Du jetzt schrittweise weiter vor. Du bist dann recht schnell bei einen korrekten Programm.

=============

Fazit für Dich und GANZ WICHTIG: Schneide Dir den Zopf mit Deinem Flüchtigkeits-Stil so schnell wie möglich ab! Beim Programmieren IST man zwar flüchtig (Du bist nicht der einzige Mensch auf der Welt, es geht JEDEM Programmierer so), aber man muß halt fortlaufend korrigieren und vor allem EINSEHEN, daß man Flüchtigkeitsfehler macht und diese korrigieren muß. Das ist das Kreuz, das Programmierer tragen.

0
Kiwi123ILU 
Fragesteller
 15.11.2012, 17:43
@WhiteGandalf

Ok dankeschön! Ich habe die Variable jetzt verbessert. Aber dennoch kommt der gleiche Fehler:

public void testFakultaet(int n)

   {class Funktion
     {

           long ergebnis;
           Funktion f = new Funktion();
           ergebnis= f.fakultaet()
           System.out.println("Ergebnis:"+n+"!"+ergebnis);

    }  
   }

nach ergebnis heißt es identifier expected? Bei mir erscheint so ein pfeil nicht, kann man das einstellen?

Danke für deine Hilfe, sorry, dass ich mich so blöd anstelle :/

0
WhiteGandalf  15.11.2012, 22:05
@Kiwi123ILU

Hmmm... Ja, das ist schon ein Problem, wenn die Fehlermeldung nicht "ordentlich" rausgehauen wird.

Aber Du kannst zumindest versuchen, im Ansatz zu verstehen, was gemeint sein könnte! Sei mal Deinerseits entgegenkommen gegenüber dem armen Compiler! :P Außerdem wäre dann doch dringend anzuraten, eine IDE zu nehmen, die die Fehlermeldungen ANSTÄNDIG darstellen kann, also Netbeans oder Eclipse!

  • bei der ersten Fehlermeldung hieß das AUCH SCHON "identifier expected"!
  • da war WAS nochmal "schuld" daran?
  • richtig: Das Du eine Variable benutzen wolltest, deren Name SO gar nicht existierte (weil Du Dich vertippt hattest - EINE von vielen möglichen Ursachen).

Jetzt hast Du recht aufmerksam nachgearbeitet und die fragliche Variable korrigiert. DIE ist jetzt "sauber".

Dennoch gibt es in derselben Zeile noch immer einen Namen (für entweder eine Variable oder eine Funktion oder einen Typ), der nirgendwo in Deinem Programm vordefiniert ist oder von Dir definiert wurde.

  • Was käme dafür in Frage?
  • Unmittelbar hinter dem Zuweisungsoperator steht ein "f". Ist DAS definiert? Schau hin!
  • Unmittelbar dahinter kommt nach einem Punktoperator das Wort "fakultaet".
  • Ist DAS irgendwo in Deinem Quelltext definiert worden? Suche es! Finde es! Gerate in Panik, wenn Du erfolglos bist!

So, die nächste Überlegung wäre dann, WIE man sowas definiert.

  • Dazu wäre es vorteilhaft, wenn Du Dir gründlich durch den Kopf gehen läßt, WAS Du da eigentlich definieren WILLST!
  • Obwohl: Eigentlich WILLST Du das GAR NICHT, Du hast es bloß irgendwie so ähnlich woanders gesehen (im Unterricht oder so?) und willst es nachbauen. Da hilft es, sich ein Tutorial mit einer gründlichen Erklärung dafür neben das Programm in den Browser zu holen!
  • Wie NENNT man denn eine Konstruktion wie das "fakultaet", was Du da benutzen willst?
  • Nachdem Du Dir über deren prinzipielle Bezeichnung klar geworden bist, kannst Du im Internet dazu suchen:

    ** Du hast "Java"! ** Du suchst den Umgang mit "Funktionen"! ** Du willst so eine "definieren" (weil: DAS war ja die Schlußfolgerung aus der Meckerei des Compilers, gelle?!)! ** Du suchst ein "Tutorial" dafür!

Dann landest Du auf Seiten wie http://openbook.galileodesign.de/javainsel5/javainsel02_006.htm

(OK: Google liefert NICHT die qualitativ hochwertigsten Ergebnisse an vorderster Stelle, deshalb hier der direkte Link...)

Da mußt Du Dich jetzt mal durchwühlen, um diese nächste Fehlermeldung beseitigen zu können. Streng Dich an, dabei nicht gleich wieder eine Masse an neuen Fehlermeldungen zu provozieren! Gehe deshalb in KLEINEN Schritten vor!

  • Erstmal ein leerer Funktionsrumpf, dann wird der Compiler meckern über einen überflüssigen Parameter.
  • Dann einen Parameter im Funktionskopf, dann wird der Compiler meckern über einen nicht passenden Return-Typ.
  • Dann einen dummy-Ausdruck wie "return 0", um dem Compiler endlich die vorlaute Schnauze zu stopfen... :P

Später, wenn die Hautfunktion steht und erstmal syntaktisch fehlerfrei durchläuft, gehst Du daran, den Inhalt der Fakultätsfunktion zu definieren, so daß sie korrekt funktioniert. Alles in kleinen Tippelschritten, aber so, daß Du mit Sicherheit weißt, was Du WARUM getan hast!

Viel Erfolg!

0
Kiwi123ILU 
Fragesteller
 18.11.2012, 13:39
@WhiteGandalf

Vielen Dank für deine Hilfe.

Ich habe meine Fehler gefunden und nun klappt es :)

0

ergebnis = f.fakultaet();

Desweiteren wird eine Klasse wie folgt aufgerufen:

public class Name { //Quellcode }