循环数组时

本文关键字:数组 循环 | 更新日期: 2023-09-27 18:25:31

我正在努力理解Don Gosselin关于用Visual C#进行ASP.NET编程的一本书。为了解决这个问题,我只需通过坚持while循环来实现它:一个while循环是为数组元素分配一个数字,另一个whire循环是显示该数组。阵列总数显示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;
    }
%>

循环数组时

您应该在第一次while循环后将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;
}

在尝试下一个while语句之前,需要将计数重置为0。目前,第一个循环在达到等于101的计数时结束。当你继续下一段时间时,计数是101,所以循环自动结束。只需设置count=0;在第二个while循环之前。

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

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

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

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

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 />");
}

现在,我意识到锻炼是关于循环的,然而,它教会你以错误的方式使用它们。一种更好的方法——以及你最经常使用它们的方式——是执行一个操作,直到满足特定的条件,而不是简单的迭代。我的意思是,一个条件被设置为false,然后在while循环中,我们操作一个变量,测试这个条件,如果它仍然是false,我们再次循环。最常见的例子是计算数字的阶乘。

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!);

学习这些东西的最好方法就是练习。挑选一项任务,找出有多少种方法可以完成它。不过,还有最后一个重要的区别需要提及。CCD_ 5循环测试循环开始时的条件。一个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 />")));