2017-01-22 5 views
3

ich dieses Programm zu schreiben, das die Klasse Ant hat:Java- Looping durch durch eine Anordnung mit Instanzvariablen in Konstrukteuren

  • Der Standardkonstruktor initialisiert die Instanzvariablen Königinnen nur 1 Queen namens „Beth "Und colonySize bis 100.000.

  • Der definierte Konstruktor nimmt zwei Parameter auf und initialisiert die entsprechenden Instanzvariablen .

  • Die Methode Display zeigt die Informationen über eine Ameise im Format unter:

    This ant colony has the following queens: 
    Queen 1: Beth 
    The colour of the ants: black 
    The approximate colony size: 100000 
    

Hier ist die Klasse Ants ich dieses geschrieben habe:

public class Ant { 

private String[] queens= new String [1]; 
public String colour= "black"; 
private int colonySize; 


public Ant(){ 

    queens[0]= "Beth"; 
    colonySize= 100000; 
} 

public Ant(String[] queens, int colonySize){ 
    this.queens[0]= queens[0]; 
    this.colonySize= colonySize; 
} 

public void display(){ 
    for(int i=0; i<queens.length;i++){ 
     System.out.println("Queen "+ (i+1) +":" + queens[i]); 
    } 
    System.out.println("The colour of the ants: "+ this.colour); 
    System.out.println("The approximate size of the colony: "+ this.colonySize); 
    } 
} 

Dann erweitert die Klasse FireAns die Klasse Ameisen, wobei

  • Der definierte Konstruktor übernimmt zwei Parameter und initialisiert die relevanten Instanzvariablen . Es setzt dann die Farbe der Ameisen auf "rot" und die giftige Instanzvariable auf "wahr".

  • Die Methode Display zeigt die Informationen zu einem Feuerameise im Format unter:

    This ant colony has the following queens: 
    Queen 1: Lilith 
    Queen 2: Maya 
    The colour of the ants: red 
    The approximate colony size: 250000 
    The Fire ants are: venomous 
    

Klasse Fireants:

public class FireAnt extends Ant { 

private boolean venomous; 

public FireAnt(String[] queens, int colonySize){ 

    super(new String[]{"Lilith", "Maya"}, 250000); 
    super.colour= "red"; 
    this.venomous= true; 
} 

    public void display(){ 
     super.display(); 
     if(this.venomous=true){ 
     System.out.println("The ants are: venomous");} 
    } 

} 

Die Klasse MainAnts die initialisiert ein Array Ameisen mit den folgenden:

i) Eine FireAnt-Kolonie mit zwei Königinnen namens Lilith und Maya bzw. mit einer Koloniegröße von 250.000 Ameisen.

ii) eine Ameise

und die folgende angezeigt wird, wenn es ausgeführt wird:

This ant colony has the following queens: 
Queen 1: Lilith 
Queen 2: Maya 
The colour of the ants: red 
The approximate colony size: 250000 
The Fire ants are: venomous 

This ant colony has the following queens: 
Queen 1: Beth 
The colour of the ants: black 
The approximate colony size: 100000 

Klasse MainAnts:

public class MainAnts { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Ant obj[]= new Ant[2]; 


    obj[0]= new Ant(); 
    obj[1]= new FireAnt(new String[]{"Lilith", "Maya"}, 250000); 

for(int i=0; i<2;i++){ 
    obj[i].display(); 
    System.out.println(); 
} 


} 
} 

Die Sache ist die, dass, wenn ich das Programm leite nur die erste Queen von FireAnts wird gedruckt. Unten ist die Ausgabe, wenn die Hauptklasse ausgeführt wird.

Ich nehme an, es ist, weil ich in der Ameisen-Klasse Königin auf das erste Element im Array gesetzt habe. Ich möchte auch wissen, wie die boolesche Variable venomous ausgedruckt werden kann, wenn es auf true festgelegt ist, anstatt es hart zu codieren. Kann nicht herausfinden, wie man diese 2 Dinge repariert.

Jede Hilfe würde sehr geschätzt werden. Außerdem möchte ich Vorschläge und Verbesserungen im Programm haben.

Danke.

+2

Elliott seiner Antwort Ihre Probleme beheben soll. Erwägen Sie, Ihre Klassen in 'AntColony' und' FireAntColony' umzubenennen, da die Objekte eigentlich keine einzelne Ameise darstellen. – Michael

+0

@Michael Danke für den Vorschlag :) – Tia

Antwort

3

Im Ant Konstruktor kopieren Sie nur die erste queen. Ändern

public Ant(String[] queens, int colonySize){ 
    this.queens[0]= queens[0]; 
    this.colonySize= colonySize; 
} 

zu

public Ant(String[] queens, int colonySize){ 
    this.queens = queens; 
    this.colonySize= colonySize; 
} 

Und ändern

super(new String[]{"Lilith", "Maya"}, 250000); 

zu

super(queens, colonySize); 

Schließlich wird, wie auf Ihre venomous Frage, eine = ist Zuordnung; du brauchst zwei für die Gleichheit.

if(this.venomous=true){ 

sollte

if(this.venomous==true){ 

oder nur

if(this.venomous){ 
+0

Vielen Dank für die obige Lösung. Eigentlich meinte ich für den giftigen Teil, wie ich es so ausdrucken kann. "System.out.println" ("Die Ameisen sind:" + this.venomous). Nun, wenn es möglich ist, auf diese Weise auf einen booleschen Wert zuzugreifen. – Tia

+2

@Diksha Sie könnten den [ternary operator] (https://en.wikipedia.org/wiki/%3F :) verwenden. 'System.out.println (" Die Ameisen sind: "+ (this.venomous?" Giftig ":" nicht venemous "))' – Michael