Я действительно смущен этим. После некоторых проблем с управлением отдельными HashMaps для каждого дочернего класса я решил попробовать использовать instanceof, чтобы упростить задачу с помощью класса HashMap класса Parent, который будет включать в себя любое количество дочерних классов. Я придумал этот тестовый код:Двойное выполнение команды с instanceof и HashMap
static HashMap <Integer, ant> antMap = new HashMap();
public static void main(String[] args) {
// ant is parent to antF, antSo, and antB
ant testSc = new ant();
antF testF = new antF();
antSo testS = new antSo();
antB testB = new antB();
antMap.put(testSc.ID, testSc);
antMap.put(testF.ID, testF);
antMap.put(testS.ID, testS);
antMap.put(testB.ID, testB);
ant grand = new ant();
int loop = 0;
for (int s = 1; s < 5; s++){
grand = antMap.get(s);
loop++;
if(grand instanceof ant){
System.out.println("type " + grand.type + grand.ID + "Loop " + loop);
}
if(grand instanceof antF){
antF work = (antF) grand;
System.out.println("type " + work.type + work.ID + "Loop " + loop);
}
if(grand instanceof antSo){
System.out.println("type " + grand.type + grand.ID + "Loop " + loop);
}
if(grand instanceof antB){
System.out.println("type " + grand.type + grand.ID + "Loop " + loop);
}
}
я поставил счетчик цикла там, чтобы увидеть, если цикл был удвоение каким-то образом, но выход:
type Scout1Loop 1
type Forager2Loop 2
type Forager2Loop 2
type Soldier3Loop 3
type Soldier3Loop 3
type Bala4Loop 4
type Bala4Loop 4
Я вижу родительский класс (помеченный здесь разведчик) выполняется правильно. Класс конструктора в мураве присваивает идентификатор на основе количества муравьев, поэтому Forager должен быть Forager2, Soldier должен быть Soldier3 и т. Д.
Я не могу на всю жизнь понять, почему дочерние классы выполняются дважды. Счетчик циклов показывает это.
Есть ли у кого-нибудь предложения?
Edit: вы можете видеть, что я пытался несколько различных вещей внутри для цикла, чтобы получить ожидаемые результаты)
(я стараюсь, чтобы пометить это в качестве домашнего задания, хотя это не конкретное решение)
..
Можете ли вы показать определение класса для каждого типа? Как 'общественного класса муравей ...' и 'класса antF общественного ...' – Ascalonian
Конструкторы следующим \t 'общественного муравей() { \t // муравьи всегда будут заштрихованы в узле Queen на 13,13 \t \t this.ID = ++ numberOfAnts; \t \t this.age = 0; \t \t this.type = "Scout"; \t \t this.x = 13; \t \t this.y = 13; \t \t это.lifespan = 3650; \t \t это.location = "1313"; \t} \t общественного antB() { \t \t супер(); \t \t this.type = "Bala"; \t} \t public antF() { \t \t super(); \t \t this.type = "Forager"; \t} \t public antSo() { \t \t super(); \t \t this.type = "Soldier"; \t} ' –