Arrays im Konstruktor

Funktionierdochmal

Bekanntes Mitglied
Hi, ich habe eine Methode vom Typ Geschenk in der Klasse Schlitten. Beim Konstruktoraufruf Schlitten habe ich zwei Arrays als Parameter angegeben (Rentier[] rentiere, Geschenk[] geschenke). In meiner Methode möchte ich nun mit der Länge meines geschenke-arrays arbeiten, nur verstehe ich die Zusammenhänge nicht, wo ich geschenke deklarieren soll.
Java:
public class Schlitten extends WeihnachtsObjekt {
   
    public Schlitten(Rentier[] rentiere, Geschenk[] geschenke) {
       
    }

               
    public Geschenk getNaechstesGeschenk () {
        Geschenk[] temp = new Geschenk[this.geschenke.length - 1];
       
        temp[0] = this.geschenke[0];
       
        for(int i = 1; i < temp.length; i++) {
            temp[i] = this.geschenke[i];
           
            return temp[0];
        }
    }
In meinem Code wird geschenke rot unterkringelt. Anscheinend kann er sich auf keinen Wert beziehen. WO und WIE mache ich das?
 
Diesen Teil habe ich in der main Methode:
Java:
 int arraygroesseGeschenke;
       
        do {
            arraygroesseGeschenke = scanner.nextInt();
        } while(arraygroesseGeschenke < 0);
       
        Geschenk[] geschenke = new Geschenk[arraygroesseGeschenke];
heisst das ich muss erst einmal etwas eingeben?
 
Ein Konstruktor wie etwa:
Java:
public Schlitten(Rentier[] rentiere, Geschenk[] geschenke) {
  // hier ist nix drin...
}
ist komplett sinnlos. Er bekommt zwar zwei Parameter, aber damit tust du ja garnichts. Sinnvoll wäre es, sich diese Parameter in Instanzvariablen/-attributen/-feldern der Klasse zu merken.
Also ersteinmal benötigst du wohl zwei Instanzvariablen in der Klasse vom Typ Rentier[] und Geschenk[], denen du dann die Konstruktorparameter zuweist.
 
Ich glaube ich bin einfach zu doof dafür.😕
Java:
public class Schlitten extends WeihnachtsObjekt {
   
    private Rentier[] rentiere;
    private Geschenk[] geschenke;


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

Geht das in die richtige Richtung?
 
Java:
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];
soweit so gut?
 
public Geschenk getNaechstesGeschenk
Ich gehe davon aus, dass du in deinem Schlitten ein Sack (Array) voller Geschenke hast. Wenn du dann wo auch immer du bist, das nächste Geschenk dem Sack entnimmst, dann sollte dein Sack um das Geschenk eben auch kleiner werden. Also musst du bei jedem Aufruf der Methode getNaechstesGeschenk
  • prüfen, ob mindestens ein Geschenk vorhanden ist
  • den Sack auf den aktuellen Stand bringen, in dem du das Herausgenommene Geschenk entfernst
Zudem, es gibt insgesamt neun Rentiere, demnach würde ich diese als Attribute der Klasse Schlitten vergeben.
Java:
public class Geschenk
{

    private final String name;

    public Geschenk(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

}
Java:
public class Schlitten extends WeihnachtsObjekt
{

    private final Rentier[] rentiere; //? ist das wirklich richtig ?
   
   
    private Geschenk[] geschenke;

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

    public Geschenk getNaechstesGeschenk()
    {
        Geschenk geschenk = null;
        if (this.geschenke.length > 0)
        {
            geschenk = this.geschenke[0];
            Geschenk[] neueListe = new Geschenk[this.geschenke.length - 1];
            System.arraycopy(this.geschenke, 1, neueListe, 0, this.geschenke.length - 1);
            this.geschenke = neueListe;
            return geschenk;
        }
        return geschenk;
    }

    public void zeigeGeschenkeImSack()
    {
        System.out.println("Im Sack vorhandene Geschenke");
        for (Geschenk g : this.geschenke)
        {
            System.out.println(g.getName());
        }
    }

}
Java:
public class LittlePresent
{

    public static void main(String[] args)
    {
        Geschenk[] geschenke = new Geschenk[5];
        geschenke[0] = new Geschenk("Auto");
        geschenke[1] = new Geschenk("Puppe");
        geschenke[2] = new Geschenk("Murmel");
        geschenke[3] = new Geschenk("Code");
        geschenke[4] = new Geschenk("Buch");
        Rentier[] rentiere = new Rentier[9];

        Schlitten schlitten = new Schlitten(rentiere, geschenke);
        schlitten.zeigeGeschenkeImSack();

        Geschenk fuerPeter = schlitten.getNaechstesGeschenk();
        System.out.println("Geschenk für Peter: ".concat(fuerPeter.getName()));
        schlitten.zeigeGeschenkeImSack();

    }

}
/** Output */
Im Sack vorhandene Geschenke
Auto
Puppe
Murmel
Code
Buch
Geschenk für Peter: Auto
Im Sack vorhandene Geschenke
Puppe
Murmel
Code
Buch
 

Neue Themen


Zurück
Oben