Methodenzugriff einer anderen Klasse funktioniert nicht :(

funktionierdoch

Cadet 2nd Year
Dabei seit
Dez. 2018
Beiträge
19
Hi,
in einer Klasse "Weihnachtsmann" möchte ich auf das Array bzw. die Arraylänge einer Klasse "Schlitten" zugreifen können. Das wird mir nur erlaubt, wenn ich in der Klasse Schlitten das Attribut Rentier[] rentiere; nicht mehr auf private setze ( laut Aufg.stellung muss ich das tun!).
Java:
package de.weihnachten;
import de.weihnachten.Schlitten;

public class Weihnachtsmann extends WeihnachtsObjekt {
    private double futtervorrat;
    private Schlitten schlitten;


    public Weihnachtsmann(double futtervorrat, Schlitten schlitten) {
        this.futtervorrat = futtervorrat;
        this.schlitten = schlitten;
    }

    public boolean istFertig() {
        // (Oder return this.schlitten.istLeer();)
        boolean geschenkeAusgeliefert = false;
        if(this.schlitten.istLeer()) {
           return true;
        } else {
            return geschenkeAusgeliefert;
        }
    }

    public boolean kannNochFuettern() {
        boolean genugFutter = false;
        double gesamtHunger = 0;
// ES GEHT UM DIESEN TEIL! schlitten.rentiere.length funktioniert nicht!
        for(int i = 0; i < this.schlitten.rentiere.length; i++) {
           
        }
        if(futtervorrat - this.schlitten.getRentier.getHunger(this.schlitten.getGewicht()) > 0) {
           genugFutter = true;
        }
        return genugFutter;
    }
Java:
package de.weihnachten;
import de.weihnachten.Rentier;
import de.weihnachten.Geschenk;

public class Schlitten extends WeihnachtsObjekt {
    
    private Rentier[] rentiere;
    private Geschenk[] geschenke;


    public Schlitten(Rentier[] rentiere, Geschenk[] geschenke) {
       this.rentiere = rentiere;
       this.geschenke = geschenke;
    }

    public Geschenk getNaechstesGeschenk () {
        Geschenk[] temp = new Geschenk[this.geschenke.length];
        
        temp[0] = this.geschenke[0];
        
        for(int i = 1; i < temp.length; i++) {
            temp[i] = this.geschenke[i];
        }
        for(int i = 0; i < temp.length; i++) {
            this.geschenke[i] = temp[i];
        }
        
        return temp[0];
    }
    
    public int getGewicht() {
        int gGewicht = 0;
        for(int i = 0; i < this.geschenke.length; i++) {
            gGewicht += this.geschenke[i].getGewicht();
        }
        return gGewicht;
      
    }

    public boolean kannFliegen(Rentier[] rentiere) {
        if(100*Math.sqrt(rentiere.length) > getGewicht()) {
           return true;
        } else {
            return false;
        }
    }
    
    public boolean istLeer() {
            if(geschenke.length == 0){
               return true;
            }
            return false;
    }
    
    public int getAnzahlRentiere() {
        int zaehler = 0;
        
        for(int i = 0; i < rentiere.length; i++) {
            zaehler++;
        }
        
        return zaehler;
    }

    public int getAnzahlGeschenke() {
        int zaehler = 0;
        
        for(int i = 0; i < geschenke.length; i++) {
            zaehler++;
        }
        
        return zaehler;
       
    }
    
    public Rentier getRentier(int index) {
        if(index < 0 && index > getAnzahlRentiere()) {
            System.out.println("Index muss zwischen 0 und der Anzahl der" +
                " Rentiere sein!");
            return null;
        }
        return rentiere[index];
    }
    
    
    
    public static void main(String[] args) {
        
    }
}
Ich wollte in der for-Schleife auf jedes einzelne Rentier zugreifen, jedoch lässt er das nicht zu. Ist meine Schreibweise in dem Fall korrekt? Habe ich evtl. einen Strukturfehler? Ich bedanke mich für jeden Schubser in die richtige Richtung.
 

Zonk91

Cadet 3rd Year
Dabei seit
März 2013
Beiträge
35
rentiere hat einen private access modifier. Entweder public machen oder was du warscheinlich machen solltest ist auf die Methode getAnzahlRentiere() zugreifen.

Geht im übrigen auch einfacher indem du schreibst...

Code:
public int getAnzahlRentiere() {
        
        return rentiere.length;
    }
 

funktionierdoch

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Dez. 2018
Beiträge
19
Oh man... die Methode habe ich komplett übersehen... stimmt danke xD
Ergänzung ()

Aber eine Sache hätte ich noch: ich muss anhand meines Futtervorrats gucken, ob mein Futtervorrat noch reicht (siehe If-Bedingung in derselben Methode). Das Problem ist, dass ich eine getHunger Methode IN der Klasse Rentiere habe... Wie kann ich darauf zugreifen?
 

Zonk91

Cadet 3rd Year
Dabei seit
März 2013
Beiträge
35
Code:
this.schlitten.getRentier.getHunger(this.schlitten.getGewicht()
"getRentier" is used like a variable but is a method... ;)
 

funktionierdoch

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Dez. 2018
Beiträge
19
if (futtervorrat - this.schlitten.getHunger(this.schlitten.getGewicht()) > 0) {

Habe wirklich alles probiert, es kommt immer ne Fehlermeldung.. :/
Ich kann über meinen Schlitten nicht auf die Klasse Rentiere zugreifen...how??
 

Zonk91

Cadet 3rd Year
Dabei seit
März 2013
Beiträge
35
Dann zeig doch mal den kompletten Code mit der Rentier-Klasse und die Fehlermeldung/en. Ohne isses schwer dir zu helfen...
 

abcddcba

Lt. Commander
Dabei seit
Juni 2018
Beiträge
1.914
Äh, Hunger hat doch das Rentier, oder nicht? schlitten.getHunger macht ja keinen Sinn, bzw. sehe ich die Methode nicht in deiner Klasse. Und du musst dann natürliche über die Klasse Schlitten auf die Rentiere zuerst zugreifen und den Hunger wohl noch aggregieren. Füge ne Methode getRentiere hinzu oder füge gleich eine Methode getHunger hinzu, die über die Rentiere iteriert und den Hunger aufsummiert.
 
Top