刚学C#不久,碰到了一个很奇怪的问题。运行的时候不能得到正确的结果但是如果插入断点。单步执行就能得到结果。很奇怪。代码如下。
using System;
using System.Collections.Generic;
using System.Text;
using ClassLib;namespace _4
{
public class Program
{
public int[] fivecards=new int[5];
static void Main(string[] args)
{
Deck mydeck = new Deck();
mydeck.Shufel();
Program mypro = new Program();
mypro.getfivecard();
for (int i = 0; i < 5; i++)
{
int temp = mypro.fivecards[i];
Card mycard = mydeck.getcard(temp);
Console.WriteLine(mycard.ToString());
}
}
public void getfivecard()
{
bool[] mybool = new bool[52]; for (int i = 0; i < 5; i++)
{
int destcard = 0;
bool assgined = false;
Random r = new Random(); while (assgined == false)
{
destcard = r.Next(52);
if (assgined==false)
{
fivecards[i] = destcard;
assgined = true;
}
mybool[destcard] = true;
}
}
}
}
}using System;
using System.Collections.Generic;
using System.Text;namespace ClassLib
{
public class Deck
{
private Card[] cards = new Card[52];
public Card getcard(int cardnum)
{
if (cardnum >= 0 && cardnum <= 51)
return cards[cardnum];
else
throw
(new System.ArgumentOutOfRangeException("cardnum",cardnum,"值必须在0到51之间"));
}
public Deck()
{
for (int suitcount = 0; suitcount < 4; suitcount++)
{
for (int rankcount = 1; rankcount <= 13; rankcount++)
{
cards[suitcount * 13 + rankcount - 1] = new Card((Suit)suitcount,(Rank)rankcount);
}
}
}
public void Shufel()
{
Card [] newcard =new Card[52];
bool [] assigned=new bool[52];
for (int i = 0; i <= 51; i++)
{
int destcard = 0;
bool mybool = false;
while (mybool == false)
{
Random r = new Random();
destcard = r.Next(52);
if (assigned[destcard] == false)
mybool = true;
}
assigned[destcard] = true;
newcard[i] = destcard;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;namespace ClassLib
{
public enum Suit
{
Club,
Heart,
Spade,
Diamond
}
public enum Rank
{
Ace=1,
Two,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Tem,
Jack,
Queen,
King }
public class Card
{
public readonly Suit suit;
public readonly Rank rank; private Card()
{
}
public Card(Suit newsuit, Rank newrank)
{
suit = newsuit;
rank = newrank;
}
public override string ToString()
{
return "The" + rank + "of" + suit + "s";
}
}
}其中建了一个ClassLib的类库包含一个Deck的类和一个Crad类。
主要是实现从谁机的52张牌中抽到5张谁机的牌,但是我得不到结果。
谢谢 !!!!!!!!!!!!!
using System;
using System.Collections.Generic;
using System.Text;
using ClassLib;namespace _4
{
public class Program
{
public int[] fivecards=new int[5];
static void Main(string[] args)
{
Deck mydeck = new Deck();
mydeck.Shufel();
Program mypro = new Program();
mypro.getfivecard();
for (int i = 0; i < 5; i++)
{
int temp = mypro.fivecards[i];
Card mycard = mydeck.getcard(temp);
Console.WriteLine(mycard.ToString());
}
}
public void getfivecard()
{
bool[] mybool = new bool[52]; for (int i = 0; i < 5; i++)
{
int destcard = 0;
bool assgined = false;
Random r = new Random(); while (assgined == false)
{
destcard = r.Next(52);
if (assgined==false)
{
fivecards[i] = destcard;
assgined = true;
}
mybool[destcard] = true;
}
}
}
}
}using System;
using System.Collections.Generic;
using System.Text;namespace ClassLib
{
public class Deck
{
private Card[] cards = new Card[52];
public Card getcard(int cardnum)
{
if (cardnum >= 0 && cardnum <= 51)
return cards[cardnum];
else
throw
(new System.ArgumentOutOfRangeException("cardnum",cardnum,"值必须在0到51之间"));
}
public Deck()
{
for (int suitcount = 0; suitcount < 4; suitcount++)
{
for (int rankcount = 1; rankcount <= 13; rankcount++)
{
cards[suitcount * 13 + rankcount - 1] = new Card((Suit)suitcount,(Rank)rankcount);
}
}
}
public void Shufel()
{
Card [] newcard =new Card[52];
bool [] assigned=new bool[52];
for (int i = 0; i <= 51; i++)
{
int destcard = 0;
bool mybool = false;
while (mybool == false)
{
Random r = new Random();
destcard = r.Next(52);
if (assigned[destcard] == false)
mybool = true;
}
assigned[destcard] = true;
newcard[i] = destcard;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;namespace ClassLib
{
public enum Suit
{
Club,
Heart,
Spade,
Diamond
}
public enum Rank
{
Ace=1,
Two,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Tem,
Jack,
Queen,
King }
public class Card
{
public readonly Suit suit;
public readonly Rank rank; private Card()
{
}
public Card(Suit newsuit, Rank newrank)
{
suit = newsuit;
rank = newrank;
}
public override string ToString()
{
return "The" + rank + "of" + suit + "s";
}
}
}其中建了一个ClassLib的类库包含一个Deck的类和一个Crad类。
主要是实现从谁机的52张牌中抽到5张谁机的牌,但是我得不到结果。
谢谢 !!!!!!!!!!!!!
2.以系统时钟手动构造种子...原因...
多看MSDN...知其然还要知其所以然...