需要帮助理解数组中的语法

时间:2017-12-01 22:26:25

标签: c# arrays for-loop

我无法理解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]);
}

4 个答案:

答案 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)(方括号[])的数字对应于我们尝试访问的数组中的位置。

C语言语言中的

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 事件执行一次。您对此部分的评论是现场评论。

回顾事情发生的顺序:

  1. 索引初始值设定项
  2. 有条件检查(&#34;突破&#34;如果支票返回false则停止砍伐)
  3. 循环体
  4. 索引增量器
  5. 从第2步开始重复
  6. 为了使这一点更加清晰,这里有一个小小的补充,让事情变得更加明确:

    // 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