我在视觉演播室做随机抽奖节目。它应该是这样工作的:用户输入3个数字,然后点击按钮。然后,该程序生成3个随机数(最多可达) 1000次,并在列表框中显示随机生成的数字。如果用户号码是按顺序生成的,它将在任何数字上停止,并在"x“尝试后说”成功!“
如果随机数与1000后的用户号码不匹配,则会弹出一条消息:“1000次尝试后未找到匹配”。
直到我走到最后一步,这个计划才起作用。我添加了以下代码:
// -keep track of the matching status of each digit in a boolean
bool theyMatch = (random1 == userEntered1stDigit) && (random2 == userEntered2ndDigit) && (random3 == userEntered3rdDigit);
//check all three boolean match variables, if they are all true then we have a match to the winning number, exit out of the while
if (theyMatch)
{
MessageBox.Show("Success! Match found for all 3 digits. It took " + myAttemptsInt + " tries.");
break;
}
else
{
//add what happened to the event log
MessageBox.Show("No match found after " + myAttemptsInt + " tries.");
return;
}现在,当我运行它时,它会在第一次尝试中停止,并给出成功或失败的信息。我错过了什么新代码正在覆盖旧代码??
以下是整件事:
public Form1()
{
InitializeComponent();
}
//DECLARE CLASS LEVEL FIELD VARIABLES
int CONST_cashPayoutPick3 = 500;
int CONST_cashPayoutPick4 = 5000;
int CONST_cashPayoutPick5 = 50000;
private void myBtnGenRandomNumbers_Click(object sender, EventArgs e)
{
//DECLARE LOCAL VARIABLES
int userEntered1stDigit = 0;
int userEntered2ndDigit = 0;
int userEntered3rdDigit = 0;
//INPUT-VALIDATION
//winning number: validate the 1st digit to be numeric, if not display error message and return
if (int.TryParse(myTxtBox1stDigit.Text, out userEntered1stDigit))
{
//ok
}
else
{
MessageBox.Show("Please enter a number in the first box");
return;
}
//winning number: validate the 2nd digit to be numeric, if not display error message and return
if (int.TryParse(myTxtBox2ndDigit.Text, out userEntered2ndDigit))
{
//ok
}
else
{
MessageBox.Show("Please enter a number in the second box");
return;
}
//winning number: validate the 3rd digit to be numeric, if not display error message and return
if (int.TryParse(myTxtBox3rdDigit.Text, out userEntered3rdDigit))
{
//ok
}
else
{
MessageBox.Show("Please enter a number in the third box");
return;
}
//INITIALIZE ANY VARIABLES
userEntered1stDigit = int.Parse(myTxtBox1stDigit.Text);
userEntered2ndDigit = int.Parse(myTxtBox2ndDigit.Text);
userEntered3rdDigit = int.Parse(myTxtBox3rdDigit.Text);
//GOOD SO FAR
//PROCESSING
//setup your own Random number generator object
int random1 = 0;
int random2 = 0;
int random3 = 0;
Random myRandomNumberObject = new Random();
int matchNum1;
int matchNum2;
int matchNum3;
//clear the list box
myListBoxResults.Items.Clear();
//set number of attempts = 0
int myAttemptsInt;
myAttemptsInt = 0;
//LOOP THROUGH AND CREATE SETS OF 3 RANDOM DIGITS EACH TIME THROUGH LOOP UNTIL A MATCH IS FOUND OR TRY 1,000 TIMES
while (myAttemptsInt <= 1000)
{
if (myAttemptsInt <= 999)
{
//ok
}
else
{
break;
}
//get next random digit generated from 0 to 9, for your generated digit position 1
random1 = myRandomNumberObject.Next(10);
//get next random digit generated from 0 to 9, for your generated digit position 2
random2 = myRandomNumberObject.Next(10);
//get next random digit generated from 0 to 9, for your generated digit position 3
random3 = myRandomNumberObject.Next(10);
//display the number of match attempts so far
//attempt # originally went here
myAttemptsInt = myAttemptsInt + 1;
int index = myListBoxResults.Items.Add("Attempt # " + myAttemptsInt);
//display the generated digit 1,2,3 in the labels on the Form
matchNum1 = random1;
myLabelGenerated1stDigit.Text = matchNum1.ToString();
matchNum2 = random2;
myLabelGenerated2ndDigit.Text = matchNum2.ToString();
matchNum3 = random3;
myLabelGenerated3rdDigit.Text = matchNum3.ToString();
//set the Label BackColor of all the generated digits to Color.LightGray
myLabelGenerated1stDigit.BackColor= Color.LightGray;
myLabelGenerated2ndDigit.BackColor = Color.LightGray;
myLabelGenerated3rdDigit.BackColor = Color.LightGray;
//for any generated digit that matches the winning digit,
if (random1 == userEntered1stDigit)
{
myLabelGenerated1stDigit.BackColor = Color.LightGreen;
}
if (random2 == userEntered2ndDigit)
{
myLabelGenerated2ndDigit.BackColor = Color.LightGreen;
}
if (random3 == userEntered3rdDigit)
{
myLabelGenerated3rdDigit.BackColor = Color.LightGreen;
}
// -keep track of the matching status of each digit in a boolean
bool theyMatch = (random1 == userEntered1stDigit) && (random2 == userEntered2ndDigit) && (random3 == userEntered3rdDigit);
//check all three boolean match variables, if they are all true then we have a match to the winning number, exit out of the while
if (theyMatch)
{
MessageBox.Show("Success! Match found for all 3 digits. It took " + myAttemptsInt + " tries.");
break;
}
else
{
//add what happened to the event log
MessageBox.Show("No match found after " + myAttemptsInt + " tries.");
return;
}
} 发布于 2014-04-14 02:46:34
您正在返回,而不检查循环是否已被消耗,移除该循环并将其放置在外部,同时还将中断更改为返回。
//...
if (theyMatch)
{
MessageBox.Show("Success! Match found for all 3 digits. It took " + myAttemptsInt + " tries.");
return;
}
}
MessageBox.Show("No match found after " + myAttemptsInt + " tries.");https://stackoverflow.com/questions/23051136
复制相似问题