Frage von GzudenHeim, 49

Wo ist mein Fehler in diesem Code?

package stämme;

public class Mensch {

String arbeiterNamen;


public void Namen(String name)
{
    this.arbeiterNamen = name;
}


public String getName() 
{
    return arbeiterNamen;
}

} package stämme;

public class Königreich extends Mensch{

public Königreich(String name) 
{

}

} package stämme;

public class Indianer extends Mensch{

public Indianer(String name)
{
    
}

} package stämme;

public class Jäger extends Indianer{

public Jäger(String name) 
{
    super(name);
}


public void jagen()
{
    System.out.println("Der Jäger jagt");
}

} package stämme;

public class Bauer extends Königreich{

public Bauer(String name)
{
  super(name);
}


public void arbeiten()
{
    System.out.println("Der Bauer arbeitet an seinen Feld");
}

} package stämme;

public class Adel extends Königreich{

public Adel(String name) 
{
    super(name);
}

public void standort()
{
    System.out.println("Der Adel befindet sich in seiner Burg");
}

}

Und die Ausgabe :

package stämme;

import java.util.ArrayList; import java.util.List;

import stämme.Jäger; import stämme.Koch; import stämme.Bauer;

public class Dorf {

public static void main (String[]args)
{
    List<Mensch> mensch = new ArrayList<Mensch>();
    
    for(int i=0; i<(Math.random()) * 18; i++)
    {
        mensch.add(new Jäger("Jäger" + i + "ist gerade auf jagt."));
    }
    
    for(int i=0; i<Math.random() * 9; i++)
    {
        mensch.add(new Koch("Koch" + i + "entwickelt gerade ein neues Rezept."));
    }
    
    for(int i=0; i<Math.random() * 11; i++)
    {
        mensch.add(new Bauer("Bauer" + i));
    }
    
    for(int i=0; i<mensch.size(); i++)
    {
        System.out.println((mensch.get(i)).getName());
    }

}

}

Warum wird da nur "null null null" ausgegeben ? Kann mir das jemand verbessern oder mir den Fehler vielleicht sagen?

Antwort
von Schachpapa, 31

weil die Methode getName() die Variable arbeiterNamen zurückgibt, die aber nie mit einem Wert belegt wurde.

Antwort
von ralphdieter, 23

Warum "null"?

Königreich und Indianer bekommen zwar einen Namen, werfen ihn aber weg (super(name) fehlt, außerdem der passende Konstruktor in class Mensch). Deshalb haben sie und alle davon abgeleiteten Klassen den Namen null.

Warum nur drei Menschen?

Math.random() liefert bei jedem Aufruf eine neue Zahl zwischen 0 und 1. Für den ersten Schleifendurchlauf wird 0<Math.random() * 18 höchstwahrscheinlich passen. Ein zweiter Durchlauf kommt aber nur, wenn eine Zahl > 1/18 gewürfelt wird, usw. Mehr als 4 Durchläufe sind da unwahrscheinlich. Offenbar hattest Du beim Testlauf das Pech, immer schnell eine kleine Zahl zu würfeln.

Expertenantwort
von KnusperPudding, Community-Experte für Java, 19

Du setzt den Namen nirgends.

Entweder du gestaltest den Konstruktor in deiner Klasse Mensch :

public Mensch(String name)
{
this.arbeiterNamen = name;
}

und vergisst das nicht bei den weiteren Vererbungen:

public Königreich(String name) 
{
super(name);
}

Oder du rufst explizit deinen Setter auf: public void namen(String name);

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten