Methoden Objekt wird nicht erkannt

kruemelkeksfan

Aktives Mitglied
Java:
//Hauptklasse
public class VocTrainer 

{
//Hauptmethode
public static void main (String[] args)
        
	{
	//Variablen deklarieren
            
	//Neues Menü erzeugen
	Menu mainmen = new Menu ();
  
	//Menü anzeigen
	}

}

//Menüklasse
class Menu

{
//Instanzvariablen

//Konstruktor      
Menu ()
 
	{
	Option test = new Option ("Vokabeln abfragen");
	Option config = new Option ("Neues Vokabular hinzufügen");
	}        

//Methoden    
public void String show ()

	{
	System.out.println ( test.show () );
	System.out.println ( config.show () );
	}

}

//Menüpunktklasse
class Option

{
//Instanzvariablen
private String optname; 

//Konstruktor
Option (String name)

	{
	optname = name;    
	}       
    
//Methoden    
public String show ()
  
	{
	return optname;    
	}

}

Hi Leute,
der Zweck des oben stehenden Programmes ist nichts weiter, als ein Hauptmenü mit 2 Unterpunkten zu erzeugen und anzuzeigen. Leider tut es das nicht.
Der Compiler gibt die Fehlermeldung

VocTrainer.java:35: '(' expected
public void String show ()
^
1 error

aus und NetBeans meldet, dass "test" und "config" nicht gefunden werden können. Kann mir jemand sagen, wo das Problem liegt? Sind die Konstruktoren oder die Methoden falsch?
 
Ist den jede Klasse auch in einer seperaten Datei? Ansonsten sehe ich spontan nichts, was den ersten Fehler produzieren würde.

Deine Optionen "Option test" und "Option config" sind nur lokale Variablen im Kontruktor. Diese benötigst du als Instanzvariablen.

PS: Evtl. hast du es absichtlich gemacht, aber nochmals ls Hinweis: Wenn du kein private / public vor eine Klasse / Methode / Instanzvariable schreibst, dann sind die per default "protected".
 
Zuletzt bearbeitet:
Java:
public void String show()
Eine Methode kann nicht gleichzeitig nichts und einen String zurückgeben. Du musst dich entscheiden.
 
Zuletzt bearbeitet von einem Moderator:
Standardsichtbarkeit sollte doch ausreichen? Warum muss ich jede in eine seperate Datei schreiben? Natürlich brauche ich config und test als globale Objekte und nicht nur lokal, ich probier mal, das umzuschreiben.
 
Ich habe jetzt alle 3 Methoden in seperate .java Dateien kopiert, auf public gesetzt, kompiliert und laufen lassen, Ergebnis:

Maximilians-MacBook-Pro:desktop maxmacbook$ javac Option.java
Maximilians-MacBook-Pro:desktop maxmacbook$ javac Menu.java
Menu.java:19: cannot find symbol
symbol : variable test
location: class Menu
System.out.println ( test.show () );
^
Menu.java:20: cannot find symbol
symbol : variable config
location: class Menu
System.out.println ( config.show () );
^
2 errors
Maximilians-MacBook-Pro:desktop maxmacbook$ javac VocTrainer.java
./Menu.java:19: cannot find symbol
symbol : variable test
location: class Menu
System.out.println ( test.show () );
^
./Menu.java:20: cannot find symbol
symbol : variable config
location: class Menu
System.out.println ( config.show () );
^
2 errors

Wenn beide Klassen Fehler bringen, liegt das Problem wahrscheinlich bei der Methode, oder? Gibt es dort irgendeinen Syntaxfehler, den ich übersehen habe?
 
Standardsichtbarkeit sollte doch ausreichen? Warum muss ich jede in eine seperate Datei schreiben?
Müssen nicht, aber es macht es übersichtlicher als dieses "Ein-Dateien-Design". Übrigens: separat
Natürlich brauche ich config und test als globale Objekte und nicht nur lokal, ich probier mal, das umzuschreiben.
Warum willst du jetzt in dieses Extrem umschlagen? Zum Unsinn globaler Variablen wurde sich schon zur Genüge ausgelassen. Lokal ist genau richtig, aber eben mit Instance nicht nur Constructor als Scope, oder anders gesagt: als Instanzattribut.
 
Müssen nicht, aber es macht es übersichtlicher als dieses "Ein-Dateien-Design". Übrigens: separat
Lokal ist genau richtig, aber eben mit Instance nicht nur Constructor als Scope, oder anders gesagt: als Instanzattribut.

noch mal auf Java-Einsteiger-Deutsch, bitte. Warum sind die Objekte nur "lokale Variablen"? Wie kann ich sie soweit öffentlich machen, dass das Programm funktioniert?
Ich habe mich an einem Beispielprogramm orientiert, wo es diese ganzen Probleme nicht gibt:

Ausführbare Version des Programms

Was ist dort anders?
 
OK, lokal war die falsche Wortwahl, Attribute trifft es eher, aber globale Variablen sind eine ganz andere Geschichte und hier fehl am Platz.

Zurück zum Thema: In dem Beispiel werden Attribute benutzt statt wie bei dir nur lokale Variablen im Konstruktor, welche sofort nach dem Konstruktordurchlauf ihre Gültigkeit verlieren. Wenn du nicht weißt, was Attribute in Java sind -> Google oder Einsteigerbuch.
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben