在循环数组时

时间:2014-10-04 23:16:46

标签: c# asp.net arrays while-loop

我试图理解Don Gosselin关于使用Visual C#进行ASP.NET编程的一本书。为了解决它,我只是简单地通过遵循while循环使其工作:一个while循环是为数组元素分配一个数字,另一个while循环是为了显示该数组。总数组计数显示1到100.这应该有效,但没有。 Visual Studio 2013调试器由于某种原因分配count = 100,这就是它失败的原因。

<%
    int count = 0;
    int[] numbers = new int[100];

    while (count <= 100)
    {
        numbers[count] = count;
        ++count;
    }
    while (count <= 100)
    {
        Response.Write(numbers[count] + "<br />");
        ++count;
    }

%>

3 个答案:

答案 0 :(得分:2)

首次循环后应将count设置为0:

int count = 0;
int[] numbers = new int[100];

while (count <= 100)
{
    numbers[count] = count;
    ++count;
}
count = 0;
while (count <= 100)
{
    Response.Write(numbers[count] + "<br />");
    ++count;
}

答案 1 :(得分:1)

在尝试下一个while语句之前,需要将计数重置为0。当前,第一个循环在达到等于101的计数时结束。当您继续进行下一个循环时,计数为101,因此循环自动结束。只需设置count = 0;在第二个while循环之前。

答案 2 :(得分:1)

这似乎是一种使用while循环和数组的非常复杂和不切实际的方法。为了更好地理解它,每一步都可能值得考虑。

var i = 0;

while (i < 100)
{
    Response.Write(++i + "<br />");
}

第一个重要区别是i++++i之间。前者利用该值,然后递增1;后者,增加数字,然后利用该值。

在C#中,您应该使用Collections而不是Arrays。数组是零索引的,并且因导致严重错误而闻名,包括暴露潜在的漏洞。静态分配,在尝试访问数组边界之外的指示时没有故障保护。另一方面,集合(在大多数情况下)是一个索引,动态分配,并在访问指标时提供回退。最常用的Collection是List。

var i = 1;
var list = new List<int>();

while (i <= 100)
{
    list.Add(i++);
}

对于第二个while循环,对于任何实际示例,它不适合在这里使用while循环。练习是在不需要它们的情况下强制循环。在这种情况下,目标是遍历数组中的每个元素(List)并将其内容转储到屏幕上。因为我们想要为每个元素执行操作,所以while循环可能会导致问题。如果数组少于100个元素,程序将崩溃,如果数组有超过100个元素,我们会错过其中一些元素。通过使用foreach循环,而不是一段时间,我们可以消除这些潜在的错误。

foreach (var num in list)
{
    Response.Write(num + "<br />");
}

现在,我意识到练习是关于while循环的,但是,它教你以错误的方式使用它们。更好的方法 - 以及您最常使用它们的方法 - 是在满足特定条件之前执行操作,而不是简单迭代。通过这个,我的意思是,一个条件设置为false,然后在while循环中,我们操作一个变量,测试条件,如果它仍然是假的,我们再次转向。最常见的例子是算出数字的阶乘。

var num = 5;
var factorial = 1;

while (counter > 1)
{
    factorial *= num--;
}

Response.Write(String.Format("{0}! = {1}", input, factorial));

使用while循环的另一种主要方式是强制无限循环,除非满足中断条件。我将在这里展示一个非常随意的用法,但真实世界的例子是Arduino C编码中的loop()方法,或者一直不断重复相同程序的HTTP侦听器,直到停止。

var stop = 13;
Response.Write("Pick a number between 1 and 100...<br /><br />");
while (true)
{
    var num = new Random().Next(1, 101);
    Response.Write(num + " ..... ");
    if (num == stop) break;
    Response.Write("You got lucky!<br />");
}
Response.Write("Unlucky for you!);

学习这些东西的最好方法就是练习它们。选择一项任务,找出完成任务的方法。不过要提到最后一个重要的区别。 while循环在循环开始时测试条件。一个do while循环,最后测试条件。

while(false)
{
    // This code will never be run.
}

与:相比:

do
{
    // This code will be run once only.
}
while(false)

最后想一想,这就是我如何编写原始代码(使用LINQ foreach循环):

var numbers = new List<int>();

for (var count = 1; count <= 100; count++)
{
    numbers.Add(count);
}

numbers.ForEach(num => Response.Write(num + "<br />")));