我正在Visual Studio 2010中编写C#程序,以构建一个Windows应用程序.
我创建了一个名为Store的类.在Store类中,我创建了一个名为StoreLength的方法(Store ob)
public int StoreLength(Store ob)
{
int i = 0, L = 0;
while (i < 100)
{
if (ob.a[i] != null)
L += 1;
}
return L;
Run Code Online (Sandbox Code Playgroud)
现在从其他类我创建了一个Store类的对象.使用该对象我试图使用StoreLength方法.
private void buttonEqual_Click(object sender, EventArgs e)
{
int l = ob.StoreLength(ob);
DisplayUnit.Text = Convert.ToString(l);
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行程序时,每个标志都正常工作,但是当我点击buttonEqual时,窗口会冻结.我认为在buttonEqual1_Click mothod或StoreLength方法中存在一些问题.
请帮忙.
小智 7
这是因为while循环的条件总是得到满足.
每次评估时i,它总是小于100,因为你设置它0并且它的值不会改变.
典型的方法是i在每次迭代时增加1:
while (i < 100)
{
i++;
if (ob.a[i] != null)
L += 1;
}
Run Code Online (Sandbox Code Playgroud)
导致它冻结的原因是因为你的UI正在"等待"(以迂回的方式)来完成这个while循环.
另外,考虑使用这样for的场景循环.为了便于阅读和一致性,它建议在一行上声明,初始化,条件和增量:
for(int i = 0; i < 100; i++)
{
if (ob.a[i] != null)
L += 1;
}
Run Code Online (Sandbox Code Playgroud)