我试图理解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;
}
%>
答案 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 />")));