C#为什么我得到此输出?输出多次写入对象名称

时间:2018-07-01 16:03:30

标签: c#

我正在制作一个简单的D&D战斗程序。我正在尝试获取使随机数量的对象命名为敌人的程序。我以为自己做到了,但是当我console.writeline的敌人列表时,我得到的是同一物体的双倍?

namespace ConsoleApp2
{
public class Enemy
{

    int HP = Tool.RandomNum(5, 20);

    public static int currentEnemies;
    public string Name = "Enemy ";


}
public static void CreateEnemies(int NumberOfEnemies)

List<Enemy> Enemieslist = new List<Enemy>();
int EnemyName=0;
while (NumberOfEnemies>0)
{                     
    NumberOfEnemies--;
    EnemyName++;
    Enemieslist.Add (new Enemy { Name = "Enemy " + (EnemyName) });
    foreach  (var Enemy in Enemieslist)
    {
      Console.WriteLine(Enemy.Name);
    }
      Enemy.currentEnemies++;


}
static void Main(string[] args)
{
    Tool.CreatePlayers();
    Tool.CreateEnemies(Tool.RandomNum(1,10));           //Tool.RandomNum(Highest Possible Value, Lowest)
    Console.WriteLine("{0} Enemies Approach...", Enemy.currentEnemies);
    Console.WriteLine("{0} Fighters Stands Ready...", Player.currentPlayers); 
}

输出:

  how many Players? 1
  Player 1 what is you name? Ragnar
  Enemy 1
  Enemy 1
  Enemy 2
  Enemy 1
  Enemy 2
  Enemy 3
  Enemy 1
  Enemy 2
  Enemy 3
  Enemy 4
  Enemy 1
  Enemy 2
  Enemy 3
  Enemy 4
  Enemy 5
  Enemy 1
  Enemy 2
  Enemy 3
  Enemy 4
  Enemy 5
  Enemy 6
  Enemy 1
  Enemy 2
  Enemy 3
  Enemy 4
  Enemy 5
  Enemy 6
  Enemy 7
  7 Enemies Approach...
  1 Fighters Stand Ready...
  Press any key to continue . . .

该程序似乎在制造正确数量的敌人,但多次写下他们的名字。

2 个答案:

答案 0 :(得分:1)

您有一个循环

while (NumberOfEnemies > 0)
{
    foreach  (var Enemy in Enemieslist)
    {
       Console.WriteLine(Enemy.Name);
    }
}

在while循环中,您正在编写每个Enemy.Name,这是您获得的输出。

public static void CreateEnemies(int NumberOfEnemies)丢失了{ }

答案 1 :(得分:0)

看起来您有writeline语句来指示敌人的名字写在错误的位置-在创建第一个敌人后,它会为所有敌人写 所有敌人都只是“敌人1”

但是在创建第二个敌人之后,它会再次为所有敌人书写。“ Enemy1,Enemy2”

然后再进行第3次。然后进行第4次

每次创建敌人时,它就会写出全部敌人列表。