【发布时间】:2011-11-16 14:47:47
【问题描述】:
我正在为飞机编写一个随机座位生成器,并在其中使用 FOR 循环。问题是,占用的座位只有在一切完成后才会显示。我想做的是在每次迭代中,显示选择的随机座位。如何做到这一点?
这是我正在使用的代码。这架飞机有 118 个座位,每个座位都有一个名为“img_Seat_X”的图片框。我知道有更好的方法,但我很快就会想到。提前致谢!
private void btn_WeightBalance_Populate_Click(object sender, EventArgs e)
{
int passengers = Convert.ToInt32(txt_WeightBalance_Passengers.Text);
List<int> seats = new List<int> { }; numberofSeats = 119;
if (rdb_WeightBalance_190.Checked == true)
numberofSeats = 107;
for (int x = 0; x < Passengers; x++)
{
int randomNumber = RandomNumber(1, numberofSeats);
if (seats.Contains(randomNumber))
x--;
else
{
seats.Add(randomNumber);
Control[] seat = this.panWeightBalance.Controls.Find("img_Seat_" + randomNumber, true);
seat[0].Visible = true;
seat[0].Refresh();
}
}
}
想通了!每次迭代中一个简单的 Refresh() 就可以完成这项工作!我还用 if 语句替换了 while 循环。
【问题讨论】:
-
我建议以正常的 .Net 方式以小写字母开头。变量名并不表示它们包含的内容。
Passengers是一个数字,但顾名思义,它指向代表一群人的类。这让代码有点混乱。 -
如果您的座位分配算法花费的时间超过一毫秒,那么您做错了什么。让不感兴趣的用户知道你的算法有多聪明是一个错误。他们真的不太在乎,他们只想知道在哪里坐下。不要优化不需要的代码。
标签: c# loops for-loop iteration