Cannot find symbol (symbol ist eine Variable)

Shiferino

Mitglied
Hallo Forum-Mitglieder,
das ist mein erster Eintrag, also falls ich mich in der falschen Kategorie befinde entschulde ich mich schonmal.
Ich muss für eine Praktikums-Aufgabe in der Uni Klassen für Figuren erstellen und diese dann zeichnen. Ich bekomme jedoch eine Fehlermeldung, zu der ich selbst nach langem googeln keine Lösung gefunden habe. Damit alles nachvollziehbar ist, poste ich hier meinen Quellcode und die jeweiligen Fehlermeldungen. Ich möchte bitte KEINE fertigen Lösungen, sondern nur einen Hinweis wo mein Fehler liegt, da ich probiere die Sprache zu lernen und nicht nur abzuschreiben 🙂

Quellcode:
Java:
import java.awt.*;
import java.math.*;
import java.awt.event.*;
public class Figur
{
    double getCircumference(){return 0;}
    double getArea(){return 0;}
    int getHeight(){return 0;}
    int getWidth(){return 0;}
    public void paint(Graphics g){};


    public void setHeight(int Height){
        this.Height = Height;
    }
    public int getHeight(int Height){
        return Height;
    }
    public void setWidth(int Width){
        this.Width = Width;
    }
    public int getWidth(int Width){
        return Width;
    }
    public class Rechteck extends Figur {
        int Height;
        int Width;

        public Rechteck(int Height, int Width){
            super(getHeight, getWidth);
            this.Height = Height;
            this.Width  = Width;
        }

        @Override
        public double getCircumference(){
            return(2*Height+2*Width);
        }

        @Override
        public double getArea(){
            return(Height*Width);
        }
    }

    public class Quadrat extends Figur {
        int Height;


        public Quadrat(int Height){
            super(getHeight, getWidth);
            this.Height = Height;
  
        }

        @Override
        public double getCircumference(){
            return(4*Height);
        }

        @Override
        public double getArea(){
            return(Height*Height);
        }
    }



    public class Kreis extends Figur {
        int durchmesser;
        public Kreis(int Height){
            super(getHeight, getWidth);
            this.Height = durchmesser;
        }
        @Override
        public double getCircumference(){
            return(durchmesser*Math.PI);
        }
        @Override
        public double getArea(){
            return(Math.PI * ((durchmesser/2)*(durchmesser/2)));
        }
    }
public static void main(String[] agrs) {

//  int Height = 5;
//  int Width  = 4;

}
}


Quellcode ende


Die Fehlermeldung sieht wie folgt aus:
Figur.java:16: error: cannot find symbol
this.Height = durchmesser;
symbol: variable Height

diesen Fehler kriege ich 9 mal, manchmal mit Height, manchmal Width und dann noch mehrfach getWidth und getHeight. Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte. Danke schonmal im vorraus 🙂
 
Zuletzt bearbeitet:
Naja, es gibt keine Variable Height in deiner Klasse Figur, sort kann sie also auch nicht gefunden werden...

Wenn Figur die braucht, musst du sie auch dort deklarieren
 
Doch, das ändert was. Wie hast du es denn probiert?

BTW solltest du die anderen nicht als innere Klasse von Figur deklarieren, das macht dir nur Schwierigkeiten.
 
Also ich hatte es einfach mit int Height; und int Width; probiert und dann nochmal mit public int Height und Width da kamen die Fehlermeldungen leider immernoch. Mit nich als innere Klasse definieren meinst du ja wahrscheinlich, dass die geschweifte Klammer von der Klasse Figur direkt nach public void paint.. schließen sollte oder? Das könnte ich dann nämlich noch probieren...
 
Das habe ich grad mal gemacht und damit ist das Variablenproblem gelöst, jedoch kommt dann die Fehlermeldung: error: class, interface or enum expected
public void setHeight(int Height) mit einem Pfeil auf void oder auf die eckigen Klammern...
 
Also ich hatte es einfach mit int Height; und int Width; probiert und dann nochmal mit public int Height und Width da kamen die Fehlermeldungen leider immernoch.
Zeig doch mal, wie du es probiert hast. Das was du beschreibst funktioniert.

Mit nich als innere Klasse definieren meinst du ja wahrscheinlich, dass die geschweifte Klammer von der Klasse Figur direkt nach public void paint.. schließen sollte oder? Das könnte ich dann nämlich noch probieren...

Die anderen Klassen sollten dann noch in eigene Dateien.


Das habe ich grad mal gemacht
*Was* hast du gemacht?
 
Okay sorry, hier der Quellcode:
Java:
import java.awt.*;
import java.math.*;
import java.awt.event.*;
public class Figur
{
    double getCircumference(){return 0;}
    double getArea(){return 0;}
    int getHeight(){return 0;}
    int getWidth(){return 0;}
    public int Height;
    public int Width;
    public void paint(Graphics g){};

}
    public void setHeight(int Height){
        this.Height = Height;
    }
  
    public int getHeight(int Height){
        return Height;
    }
 
    public void setWidth(int Width){
        this.Width = Width;
    }
  
    public int getWidth(int Width){
        return Width;
    }
   
  

  

    public class Rechteck extends Figur {
        int Height;
        int Width;

        public Rechteck(int Height, int Width){
            super(getHeight, getWidth);
            this.Height = Height;
            this.Width  = Width;
        }

        @Override
        public double getCircumference(){
            return(2*Height+2*Width);
        }

        @Override
        public double getArea(){
            return(Height*Width);
        }
    }

    public class Quadrat extends Figur {
        int Height;


        public Quadrat(int Height){
            super(getHeight, getWidth);
            this.Height = Height;
      
        }

        @Override
        public double getCircumference(){
            return(4*Height);
        }

        @Override
        public double getArea(){
            return(Height*Height);
        }
    }



    public class Kreis extends Figur {
        int durchmesser;
  
        public Kreis(int Height){
            super(getHeight, getWidth);
            this.Height = durchmesser;
        }
  
        @Override
        public double getCircumference(){
            return(durchmesser*Math.PI);
        }
  
        @Override
        public double getArea(){
            return(Math.PI * ((durchmesser/2)*(durchmesser/2)));
        }
    }



  

public static void main(String[] agrs) {

//  int Height = 5;
//  int Width  = 4;

}


Die Main-funktion müsste dann wahrscheinlich noch in die Klasse Figur, aber das bringt ja erstmal nicht die Fehler denke ich mal
 
Einfach irgendwo eine geschlossene Klammer setzten ist selten sinnvoll.

Ich würde dir raten, nochmal ein paar Schritte zurück zu gehen und nur die Klasse Figur zu erstellen, und wenn die fertig ist und keine Fehler enthält der Rehe nach die anderen zu erstellen.
 
Ist dir bewusst wofür die Getter- und Setter-Methoden sind? Oder was modifier public bedeutet?

Ich würde es wie mrBrown schon empfohlen hat nur die Klasse Figur bearbeiten und die innere Klasse entfernen. Generell solltest du die innere Klasse auslagen als eigenständige.

Und als Randnotiz Bezeichner aus einem Wort für Variablen werden kleingeschrieben.

int width;
int height;
 
Ich habe die Klassen jetzt eigenständig gemacht und rufe die Subklassen in der Mainfunktion über ein Menü auf. Eure Tipps haben auf jeden Fall geholfen, danke dafür ! 🙂
 
Bin inzwischen zu Hause und kann daher keinen Quellcode mehr liefern, aber wenn ich mich richtig erinnere habe ich die Klassen Quadrat etc jetzt in extra Dateien gespeichert und diese dann über Quadrat quad = new Quadrat(Height); aufgerufen. Damit hat das ganze kompiliert und mir auch die richtigen Ergebnisse ausgegeben. Die Funktionen getHeight und getWidth habe ich zwar jetzt noch nicht so wirklich benutzt aber die werde ich morgen noch probieren zu implementieren. Ergebnisse kommen schonmal richtige raus und die Fehlermeldungen sind weg. Muss den Spaß jetzt nurnoch zum zeichnen bringen, aber dazu haben wir vom Prof ne recht annehmbare Vorgabe bekommen.
 

Zurück
Oben