C# 在本案中j出现在哪里?

C# 在本案中j出现在哪里?,c#,C#,以下是教程中的程序代码: using System; namespace ArrayApplication { class MyArray { static void Main(string[] args) { int [] n = new int[10]; /* n is an array of 10 integers */ /* initialize elements of array n */ f

以下是教程中的程序代码:

using System;
namespace ArrayApplication
{
   class MyArray
   {
      static void Main(string[] args)
      {
         int []  n = new int[10]; /* n is an array of 10 integers */

         /* initialize elements of array n */
         for ( int i = 0; i < 10; i++ )
         {
            n[i] = i + 100;
         }

         /* output each array element's value */
         foreach (int j in n )
         {
            int i = j-100;
            Console.WriteLine("Element[{0}] = {1}", i, j);
            i++;
         }
         Console.ReadKey();
      }
   }
}
使用系统;
命名空间数组应用程序
{
类MyArray
{
静态void Main(字符串[]参数)
{
int[]n=新的int[10];/*n是由10个整数组成的数组*/
/*初始化数组n的元素*/
对于(int i=0;i<10;i++)
{
n[i]=i+100;
}
/*输出每个数组元素的值*/
foreach(int j in n)
{
int i=j-100;
WriteLine(“元素[{0}]={1}”,i,j);
i++;
}
Console.ReadKey();
}
}
}

请告诉处理器什么是j以及它从何处出现?

j
是数组中的元素
n
。请参阅此处的foreach解释:

foreach语句用于迭代集合以获取所需的信息,但不能用于从源集合中添加或删除项以避免不可预知的副作用

元素
j
作为集合n中的项进行迭代。因为n是一个整数数组,所以j的类型是int

假设:
n=[1,2,3,4,5]
然后在
foreach(int j in n)
中,j是每个迭代中的元素,就像第一次迭代中的1,第二次迭代中的2,一直到最后一个元素。因此,j包含每个迭代中的数组元素,而不是索引,而是每个步骤中连续索引的值

类似于
foreach(obj中的int i)
{…}的foreach循环的执行方式如下:

var tmp = obj.GetEnumerator();
int i; // up to C# 4.0
while(tmp.MoveNext()) {
    int i; // C# 5.0
    i = tmp.Current;
    {...} // your code
}

但是,如果需要从源集合中添加或删除项,请使用for循环。

您在for循环中

所以j的每一个值都会被打印出来,并且以字符串格式作为参数给出,wich位置必须映射到wich变量


你只是对它的作用感到困惑

等于

for (int index = 0; index < n.Length; index++) {
  int j = n[index]; // <---- THIS IS YOUR `j`
  int i = j - 100;
  Console.WriteLine("Element[{0}] = {1}", i, j);
  i++;
}
for(int index=0;indexint j=n[index];//我将尝试用一个真实的例子来解释它:

假设我们有一家满是人的餐厅,我们想给每个人一块巧克力,我们可以这样想:

餐厅里的每个人{送一块巧克力}

如果我们将这一概念更接近于代码,我们可以说:

foreach(餐厅里的人){送巧克力}

现在,为了让这句话有意义,我们需要知道我们谈论的是哪家餐馆

让我们给我们的餐厅起个名字:TehPizzaPalace

因此,结果是:

foreach(TehPizzaPalace中的p人){给巧克力}

基本上,一家餐厅是一群人的集合,而人只是在陈述我们希望从TehPizzaPalace中提取的对象的类型

如果我们不知道这家餐厅是一群人,我们可以用

foreach(TehPizzaPalace中的var p){给巧克力}

在语句中:foreach(int j In n){do something}
对于数组n中的每个整数,我们将其命名为j,执行一些操作。

j
n
foreach期间初始化。它在其每个循环中都是一个新的
j
,指向迭代的
n
的值。因此,我们不需要任何语法来知道“int j”什么都不是,只是数组的元素吗?天哪,如果你不想费心学习代码的绝对基本语法,我们真的帮不了你。
foreach
是一个非常基本的构造,你必须理解……我们不必为你解释清楚。@DKk事实上,你不会对for循环的作用感到困惑。我给了你一个a回答什么
j
在for循环中。希望有帮助..我知道,但处理器是如何知道的?一种可变的“j”只是一个音调,现在已经“解释”了j是数组中的元素..我知道,知道程序的结果,但pc如何知道?@DKk它不是一种变量
j
。它是一个
int j
。您只声明“j”为int right?因此foreach循环遍历数组“n”,然后将相应的值放入“j”从来没有明确声明什么是j,如果它在n中,那么它很可能是数组的元素…这是编译器逻辑吗?很多感谢“j”是什么…在这种特殊情况下,我们如何正式称呼它,…对于stuid的问题,它只是困扰着我…很多谢了!这是我唯一清楚的。我的意思是,首先,我们有10个I-s:我们得到10个n[I]值。但只有在foreach行中,我们才真正地“分配”这些值到j中(在循环中),是吗?我的意思是,我期望的是:int j=n[I]但是编译器显然不需要这一行?不,你不需要,下面的10个i-s到FistFor循环,这里你定义了一个名为i的新变量int,这是在该范围内使用的变量…您好,非常感谢,对吧!!!如果我希望数组不是int而是双数组,那么相同的代码会是什么样子?我想要n[0]要成为100.22,n[1]要成为101.22,n[3]要成为102,22等等。@DKk很抱歉现在才回复。这将是
double[]n={100.22,101.22,0,102.22};
。注意,n[2]是
0
,正如你所问的那样。
for (int index = 0; index < n.Length; index++) {
  int j = n[index]; // <---- THIS IS YOUR `j`
  int i = j - 100;
  Console.WriteLine("Element[{0}] = {1}", i, j);
  i++;
}