我无法理解for
循环正在做什么。
对我而言,我认为:
int i = 0; //Declaring i to become 0. i is the value in myArray?
i < myArray.Length; //When i is less than any value in myArray keep looping?
i++; //Every time this loop goes through increase i by 1?
//Making an array called myArray that contains 20,5,7,2,55
int[] myArray = { 20, 5, 7, 2, 55 };
//Using the built in feature, Array.Sort(); to sort out myArray
Array.Sort(myArray);
for (int i = 0; i < myArray.Length; i++)
{
Console.WriteLine(myArray[i]);
}
答案 0 :(得分:3)
我会对你的编程知识做一些假设,所以如果这个解释涵盖了你已经熟悉的主题,请原谅我,但它们对于理解for循环的作用,什么都很重要当有人来到你身后并阅读你的代码时,它的用途是什么以及语义是什么。你的问题表明你非常接近于理解它,所以一旦你得到了一个很好的解释,希望它会像一堆砖块一样击中你。
考虑长度为5的字符串数组。您可以在C#中初始化它,如下所示:
string[] arr = new string[5];
这意味着你有一个为字符串分配了5个插槽的数组。这些插槽的名称是阵列的 索引 。不幸的是,对于那些刚接触编程的人,比如你自己,索引从0开始(这称为零索引)而不是1.这意味着新string[]
中的第一个插槽有名称或 索引 为0,第二个为1,第三个为3,依此类推。这意味着数组的 长度 将始终是一个等于最终广告位的索引加上一个 ;换句话说,因为数组是索引的并且第一个(第一个)槽的索引是0,我们知道任何给定槽的索引是n - 1
,其中n
是什么人谁不是程序员(或萌芽程序员!)通常会认为是整个数组中该插槽的位置。
我们可以使用索引从插槽中的数组中选择与索引对应的值。使用您的示例:
int[] myArray = { 20, 5, 7, 2, 55 };
bool first = myArray[0] == 20: //=> true
bool second = myArray[1] == 5; //=> true
bool third = myArray[2] == 7; //=> true
// and so on...
所以你看到我们传入indexer (MSDN)(方括号[]
)的数字对应于我们尝试访问的数组中的位置。
for
循环(C#是其中之一以及C,C ++,Java,JavaScript和其他几种)通常遵循&#34;参数的相同约定&#34;:< / p>
for (index_initializer; condition; index_incrementer)
要了解这些字段的预期用途,了解索引是很重要的。索引可以被认为是数组中每个插槽的名称或位置(或列表或任何 list-like )。
因此,为了解释for循环的每个部分,让我们逐一介绍它们:
因为我们要使用索引来访问数组中的插槽,所以我们需要将它初始化为for循环的起始值。 for循环语句中第一个分号之前的所有内容都将在for循环中的任何其他内容之前运行一次。我们将变量初始化为 index ,因为它会跟踪我们在for循环范围内的当前索引 #39;生活。使用拉丁字母表的后续字母为嵌套循环命名此变量i
是典型的(因此也是一种好的做法)。就像我说的那样,这个初始化语句恰好发生一次所以我们将0分配给i
来表示我们想要在数组的第一个元素上开始循环。
声明for循环时发生的下一件事是检查条件。这个检查将是每次循环运行时运行的第一件事,如果检查返回false
,循环将立即停止。只要导致bool
,这种情况就可以是任何条件。如果你有一个特别复杂的for循环,你可以将条件委托给方法调用:
for (int i = 0; ShouldContinueLooping(i); i++)
对于您的示例,我们将检查数组的长度。我们在惯用的观点(以及大多数人在将其视为条件时所期望的)在这里说的是,你将要对数组的每个元素做些什么。我们只想继续循环,只要我们的i
在&#34;范围内&#34;数组的总是定义为0 through length - 1
。还记得数组的最后一个索引是如何等于它的长度减1吗?这一点非常重要,因为第一次时间这个条件将是假的(即i
将不小于长度)是当它等于数组的长度,因此大于最终的时隙索引1。我们需要停止循环,因为for语句的下一部分将i
增加一个,这会导致我们尝试访问数组范围之外的索引。
for循环的最后一部分作为每次循环运行时发生的 last 事件执行一次。您对此部分的评论是现场评论。
回顾事情发生的顺序:
false
则停止砍伐)为了使这一点更加清晰,这里有一个小小的补充,让事情变得更加明确:
// Making an array called myArray that contains 20,5,7,2,55
int[] myArray = { 20, 5, 7, 2, 55 };
// Using the built in feature, Array.Sort(); to sort out myArray
Array.Sort(myArray);
// Array is now [2, 5, 7, 20, 55]
for (int i = 0; i < myArray.Length; i++)
{
int currentNumber = myArray[i];
Console.WriteLine($"Index {i}; Current number {currentNumber}");
}
运行它的输出将是:
Index 0; Current number 2
Index 1; Current number 5
Index 2; Current number 7
Index 3; Current number 20
Index 4; Current number 55
答案 1 :(得分:3)
我无法理解for循环正在做什么。
然后让我们退一步。
当你看到
for (int i = 0; i < myArray.Length; i++)
{
Console.WriteLine(myArray[i]);
}
你应该在心里想到的是:
int i = 0;
while (i < myArray.Length)
{
Console.WriteLine(myArray[i]);
i++;
}
现在我们已经根据for
重写了while
,这更简单。
当然,这要求你理解“同时”。我们可以再次理解while
,将其分解为更简单的东西。当您看到while
时,请考虑:
int i = 0;
START:
if (i < myArray.Length)
goto BODY;
else
goto END;
BODY:
Console.WriteLine(myArray[i]);
i++;
goto START;
END:
// the rest of your program here.
现在我们已经将您的循环分解为其基本部分,并且控制流程仅供您理解。走过去。
我们从i
开始等于0.假设数组的长度为3。
0小于3?是。所以我们接下来去BODY。我们编写数组的第0个元素并将i
增加到1.现在我们回到START。
1小于3?是。所以我们接下来去BODY。我们编写数组的第1个元素并将i
增加到2.现在我们回到START。
2小于3?是。所以我们接下来去BODY。我们编写数组的第2个元素并将i
增加到3.现在我们回到START。
3小于3?不。所以我们转到END,你的程序的其余部分都会执行。
现在,您可能已经注意到“goto”形式令人难以置信的丑陋,难以阅读和推理。 这就是我们发明while和for循环的原因,这样你就不必编写使用gotos的糟糕代码。但是你可以通过精神上回到goto表单来总是关于简单控制流的原因。
答案 2 :(得分:2)
i < myArray.Length;
这不是针对myArray中的值进行测试,而是针对长度(数组包含多少项)进行测试。因此它意味着:当i小于数组的长度时。
因此循环将继续运行,每次循环时加1(正如你所说),当i等于数组的长度时,意味着它已遍历所有值,它将退出循环
正如NicolásStraub指出的那样,我是数组的索引,意思是数组中项的位置,你用值0初始化它,这是正确的,因为数组中的第一个值会有一个指数为0.
直接回答有关for循环的问题:
for循环正在迭代地执行代码行(多次),数量取决于其控制语句:
for (int i = 0; i < myArray.Length; i++)
For循环通常是前置条件(循环的条件在代码之前)并且有循环计数器,是i(我实际上是一个计数器,但可以看作是索引,因为你要遍历每个元素,如果你想跳过一些然后我只会是一个柜台)。如果您想知道在之前循环多少次,那么就开始循环了。
答案 3 :(得分:0)
除了其他人所说的之外,你的思想是正确的。将数组视为一系列数据。您甚至可以使用Reverse()方法将其应用于您的数组。我会更多地研究数组,这样你就可以理解你可以用数组做的不同事情,最重要的是你需要在控制台,列表框或者text或csv文件的gridview中读取或写入它们。
我建议你补充一下:
Console.ReadLine();
执行此操作时,应用程序将如下所示: 2 五 7 20 55