C#输出与断点输出

时间:2015-12-05 20:12:03

标签: c# output

一个函数将24个随机字符串输入到带有for循环的数组的字符串列表中。另一个函数显示控制台列表中的字符串。但是我只得到一个值循环,例如1111111111111111111111111.当我设置断点时,我得到我正在寻找的输出,如12kingace342356110。这是我的函数类代码。

namespace CardWarConsoleGame
{
    class Deck
    {
        public string[] CardNames = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace" };
        public int[] CardValues = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
    }


    class WarFunctions
    {
        public static List<string> YourDeck = new List<string>();
        public static List<string> AIDeck = new List<string>();

        public static void LoadCards()
        {
            Deck deck = new Deck();
            for (int i = 0; i < 24; i++)
            {
                Random r = new Random();
                YourDeck.Add(deck.CardNames[r.Next(0, 14)]);
            }

        }

        public static void test()
        {
            for (int i = 0; i < YourDeck.Count; i++)
            {
                Console.Write(YourDeck[i]);
            }
        }
    }
}



Heres the program.cs

namespace CardWarConsoleGame
{
    class Program : WarFunctions
    {
        static void Main(string[] args)
        {
            LoadCards();
            test();
            Console.ReadLine();
        }
    }
}

3 个答案:

答案 0 :(得分:4)

您应该在循环之前创建birthDate

Random

public static void LoadCards() { Deck deck = new Deck(); Random r = new Random(); for (int i = 0; i < 24; i++) { YourDeck.Add(deck.CardNames[r.Next(0, 14)]); } }

default constructor
  

使用与时间相关的默认种子值初始化Random类的新实例。

     

默认种子值源自系统时钟并具有有限的分辨率。因此,通过调用默认构造函数紧密连续创建的不同Random对象将具有相同的默认种子值,因此将生成相同的随机数集。

答案 1 :(得分:1)

 public static void LoadCards()
 {
     Deck deck = new Deck();
     for (int i = 0; i < 24; i++)
     {
         Random r = new Random();
         YourDeck.Add(deck.CardNames[r.Next(0, 14)]);
     }
  }

不应在foreach循环中创建Random类。如果你在foreach循环中保持随机化,当它自己生成随机数时,你会根据系统时钟的时间继续开始该序列。如果将它放在foreach循环之外,它将保留它的初始种子数据并产生数字,而不会重新回到第一个。

所以你的代码看起来像这样:

 public static void LoadCards()
 {
     //Random initialized outside of the foreach loop
     Random r = new Random();
     Deck deck = new Deck();
     for (int i = 0; i < 24; i++)
     {
         YourDeck.Add(deck.CardNames[r.Next(0, 14)]);
     }
  }

关于随机的default constructor的文档。

答案 2 :(得分:1)

Check this link. They describe it beautifully 问题是你正在及时创建Random类的实例。

创建Random对象时,会使用系统时钟中的值播种。如果你在时间上创建的Random实例太接近了,它们都将以相同的随机序列播种。

创建单个Random对象,并在创建“a”类的实例时将其引用传递给构造函数,而不是为每个“a”实例创建一个Random对象。