[英]Using same objects of the class, but with different members
好的,所以我想在一個類中使用五次相同的對象。 它們都具有相同的屬性,但是它們只是多次出現。
for(int i=0;i<5;i++){
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
}
Troops類包含兩個屬性:Name和Health。 我希望所有的猴子都具有不同的實例,但又不要做出不同的變量(例如monkey1,monkey2)或不使用數組。 所有的猴子都受到不同程度的傷害,但是現在,傷害正在累積。
輸出不同的原因是填充Troop
對象列表的方式:
for(int i=0;i<5;i++){
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
}
您將通過五個迭代循環執行此操作。 因此,您的每個Troop
實例都會被添加到列表中五次 (留下帶有20個元素的army1
列表)。 因此,每個Troop
元素必須刪除五次,直到不再在列表中。
只需刪除循環,代碼2中得到的行數將與代碼1中生成的行數匹配:
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
話雖如此,在循環中添加單位不一定是錯誤的。 在閱讀代碼時,我首先想到的是,您正在嘗試創建一支包含數個相同類型單位的軍隊(四只猴子,四只飛行的猴子,四個巫師和四個氣球)。
您可以這樣做,但是請注意,這樣做的方式是,您的軍隊不會包含四只不同的猴子,而是四只相同的猴子,因為您要添加同一對象實例四次。 當減少其中之一的運行狀況時,您會看到該變化反映在同一類型的其他三個項目中。
要生成具有多個相同類型單位的軍隊,您還必須在每次迭代中創建單位,而不是將相應的初始化代碼放入循環中:
for(int i=0;i<5;i++){
Troop monkey = new Troop();
Troop flyingMonkey = new Troop();
Troop wizard = new Troop();
Troop balloon = new Troop();
monkey.name = "Monkey " + i;
flyingMonkey.name = "Flying Monkey " + i;
wizard.name = "Wizard " + i;
balloon.name = "Balloon " + i;
monkey.health = 50;
flyingMonkey.health = 50;
wizard.health = 60;
balloon.health = 55;
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
}
編輯:順便說一句,在您的代碼和類的當前階段,您可以輕松編寫此代碼,而無需任何變量來創建單個部隊:
for (int i=0; i<5; i++){
army1.Add(new Troop
{
name = "Monkey " + i,
health = 50
});
army1.Add(new Troop
{
name = "Flying Monkey " + i,
health = 50
});
army1.Add(new Troop
{
name = "Wizard " + i,
health = 60
});
army1.Add(new Troop
{
name = "Balloon " + i,
health = 55
});
}
您有4組向導,猴子,飛行猴子和氣球(20個部隊物品)。
for(int i=0;i<5;i++)
{
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
}
這意味着他們每個人必須死4次,然后才能再次露面。 但是在您的非Class代碼中,您只有4個。
var health = new List<int>() {50,50,60,55};
這就解釋了為什么向導會在非類代碼中早死,而又不斷返回(嗯,實際上,它不是向導的另一個實例)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.