Compiler-Fehler Aufrufen einer Instanzmethode

Finbar85

Neues Mitglied
Hallo liebes Forum,

dies ist mein erster Beitrag hier. Ich arbeite gerade an einem kleinen Programm, bei dem drei Lageristen über eine Warenausgabe Aufträge zur Bearbeitung zugewiesen bekommen sollen.

Es gibt also 2 Basisklassen (Auftrag, Lagerist) und eine Steuerungskomponente (Warenausgabe), welche die Lageristen und Aufträge jeweils über eine ArrayList verwalten.
Nun möchte ich zunächst über eine Methode (holeAuftrag) einem Lageristen einen Auftrag zuweisen, sofern er noch nicht beschäftigt ist. Dabei rufe ich die Instanzmethode (istBeschäftigt) aus der Klasse (Lagerist) auf. Der Compiler findet sie aber nicht:

Warenausgabe.java:40:18: error: cannot find symbol
if (!lagerist.istBeschäftigt) {
^
symbol: variable istBeschäftigt
location: variable lagerist of type Lagerist
1 error

Und ich komme einfach nicht darauf, woran es liegt.
Habe ich die Methode falsch gebaut? Ich hoffe es kann mir jemand weiterhelfen woran es hakt.
Vielen Dank schonmal fürs lesen!

Klasse Warenausgabe:
Java:
import java.util.ArrayList;

/**
 * Diese Klasse stellt ein Verwaltungssystem (aufnehmen, löschen, suchen) für
 * beliebig viele Aufträge bereit. Jedem Lageristen ist zu einem bestimmten
 * Zeitpunkt immer genau ein Auftrag zugeordnet.
 */

public class Warenausgabe {
  private Lagerist lagerist;
  
  //Erstellung der Auftrags-Liste   
  private static ArrayList<Auftrag> möbel = new ArrayList<Auftrag>();
  //Erstellung der Lageristen-Liste
  private static ArrayList<Lagerist> lageristen = new ArrayList<Lagerist>();  
  
  //Die main-Methode mit den Testbedingungen
  public static void main(String[] args) {
    
    //Erstellen der Lageristen-Liste
    lageristen.add(new Lagerist("Kuno"));
    lageristen.add(new Lagerist("Peter"));
    lageristen.add(new Lagerist("Hans"));
    
    möbel.add(new Auftrag("Bett", "210x150x60cm", "44b", 9));
    möbel.add(new Auftrag("Couch", "150x90x75cm", "28f", 7));
    möbel.add(new Auftrag("Schrank", "210x100x50cm", "34c", 5));
    möbel.add(new Auftrag("Regal", "200x60x30cm", "11g", 3));
    möbel.add(new Auftrag("Sideboard", "150x80x45cm", "39d", 8));
    möbel.add(new Auftrag("Kommode", "60x40x40cm", "8a", 2));
    möbel.add(new Auftrag("Garderobe", "210x160x100cm", "33g", 10));
    
    //peter.holeAuftrag();
    System.out.println(lageristen);
    System.out.println(möbel);    
  }  
  
  //Ein Lagerist holt sich den nächsten Auftrag aus der Liste
  public void holeAuftrag(Auftrag a){
    if (!lagerist.istBeschäftigt) {
      lagerist.setAuftrag(a);
      lagerist.setBeschäftigt();
    } // end of if
  }
  
}

Klasse Lagerist:
Java:
public class Lagerist {
  
  //Instanzvariablen
  private String name;
  private Auftrag auftrag;
  private boolean beschäftigt = false;
  //Lagerist lagerist;
  
  //Konstruktor
  public Lagerist(String name) {
    this.name = name;
  }
  
  //Methoden: access part of representation 
  public boolean istBeschäftigt(){
    if (!beschäftigt) {
      return true;
      }
    else {
      return false;
      }
    }
  
  public String getName(){
    return name;
  }
  
  public Auftrag getAuftrag(){
    return auftrag;
  }
  
  //Methoden: modify representation
  public void setAuftrag(Auftrag auftrag){
    this.auftrag = auftrag; //hier muss die Referenz mit dem Lageristen hin
  }
  
  public void setBeschäftigt(){
    this.beschäftigt = beschäftigt;
  }
  
  public void removeAuftrag(){
    this.auftrag = null;
  }
  
  //Deskriptor
  public String toString(){
    return "Lagerist "+name+" beschäftigt sich mit "+auftrag+"\n";
  }
  //Ende Methoden
}

Klasse Auftrag:
Java:
public class Auftrag {
  
  //Instanzvariablen
  private String name;
  private String maße;
  private String ort;
  private int minutesNeeded;
  private int minutesLeft;
  private boolean inBearbeitung = false;
  private boolean bereitsBearbeitet = false;
  
  // constructor 
  public Auftrag(String name, String maße, String ort, int minutesNeeded){
    this.name = name;
    this.maße = maße;
    this.ort = ort;
    this.minutesNeeded = minutesNeeded;
    this.minutesLeft = minutesNeeded;
  }
  
  //Methoden: access part of representation 
  public String getName(){
    return name;
  }
  
  public String getMaße(){
    return maße;
  }
  
  public String getOrt(){
    return ort;
  }
  
  public int getMinutesLeft(){
    return minutesNeeded;
  }
  
  public int getMinutesNeeded(){
    return minutesNeeded;
  }
  
  public boolean wirdBearbeitet(){
    return inBearbeitung;
  }
  
  public boolean fertig(){
    return bereitsBearbeitet;
  }
  
  //Methoden: modify representation
  public boolean Bearbeitung()
  {
    //Decide if modification is possible
    if (inBearbeitung) {
      //Bereits inBearbeitung!
      return false; 
    } else {
      inBearbeitung = true;
      return true;
    }
  }
  
  //Deskriptor
  public String toString(){
    String list =  "Dieser Auftrag hat den Namen "+name+", die Maße "+maße+
    ", wird gelagert in Regal "+ort+
    " und ";
    if (!inBearbeitung) {
      list += "ist nicht in Bearbeitung"+"\n"+"\n";
    } else {
      list += " braucht noch "+minutesLeft+" Minuten"+"\n"+"\n";
    }
    return list;
  }
  //Ende Methoden
}
 

Fab1

Top Contributor
Den Fehler sieht man aber auch wirklich schlecht. Erst nachdem ich alle Klassen kopiert hatte ist es mir aufgefallen :)

Und zwar liegt das Problem bei dem Methoden Aufruf in der Klasse Warenausgabe. Du rufst nicht die Methode auf, sondern möchtest auf ein Feld zugreifen. Denn bei einem Methoden Aufruf gehören noch die zwei Klammern () hin. Die hast du vergessen. Dann funzt das.

Also einfach folgendes ändern:

Java:
  public void holeAuftrag(Auftrag a){
    if (!lagerist.istBeschäftigt()) {
      lagerist.setAuftrag(a);
      lagerist.setBeschäftigt();
    } // end of if
  }
 

Neue Themen


Oben