繁体   English   中英

C# for和foreach循环的区别

[英]C# for and foreach loop difference

我正在使用 C# 8.0。 给定以下代码块,

    int[] data;
    string str1 = "";
    int size;
    Console.WriteLine("\n Input array size:");
    size = int.Parse(Console.ReadLine());
    if (size >= 1 && size <=9)
    {
      data = new int[size];
      for (int i = 0; i < data.Length; i++)
      {
        data[i] = 111 * (i+1);
        foreach (int num in data)
        {
          str1 += "\n data["+i.ToString()+"] =" + num.ToString() + "\n";

        }
        i++;
      }
      Console.WriteLine("{0}", str1);
    }
    else
      Console.WriteLine("Out of range!");

我得到以下结果:

Input array size:
3

 data[0] =111

 data[0] =0

 data[0] =0

 data[2] =111

 data[2] =0

 data[2] =333

理想情况下,我希望 output 类似于以下内容:

data[0] =111
data[1] =222
data[2] =333

我可以知道如何修改代码,为什么? 我最近才开始学习 C#。

编辑:

if (size >= 1 && size <=9)
    {
      data = new int[size];
      for (int i = 0; i < data.Length; i++)
        data[i] = 111 * (i+1);
      foreach (int num in data)
        {
          str1 += "\n data["+i.ToString()+"] = " + num.ToString() + "\n";
          i++;
        }
      Console.WriteLine("{0}", str1);
    }

这是一本书的原始版本,但我试图修复编译错误。

main.cs(18,30): error CS0103: The name `i' does not exist i
n the current context
main.cs(19,11): error CS0103: The name `i' does not exist i
n the current context
Compilation failed: 2 error(s), 0 warnings
compiler exit status 1

您的输出并没有真正输出您在此内部 for 循环中添加为文本的内容。 您为完整的数组data及其所有索引添加 output 但您声称每个data[index]都是索引i - 它不是。 i是外部循环的编号 - 而不是构造文本的内部循环。

 foreach (int num in data) { // this index you print here is NOT the index it is currently printing // also you print always the full array even those indexes still initialized // to 0.. thats why you got the 0 outputs str1 += "\n data["+i.ToString()+"] =" + num.ToString() + "\n"; }

一起删除for循环并简单地做

str1 += "\n data[" + i.ToString() + "] =" + data[i].ToString() + "\n";

int[] data;
string str1 = "";
int size;
Console.WriteLine("\n Input array size:");
size = int.Parse(Console.ReadLine());
if (size >= 1 && size <= 9)
{
    data = new int[size];
    for (int i = 0; i < data.Length; i++)
    {
        data[i] = 111 * (i + 1);
        str1 += "\n data[" + i.ToString() + "] =" + data[i].ToString() + "\n";
    }

    Console.WriteLine("{0}", str1);
}
else
    Console.WriteLine("Out of range!");

要得到

Input array size:

3

 data[0] =111

 data[1] =222

 data[2] =333

找到更正后的代码。 您不需要第二个 for 和 data 是一个数组。 此外,将 1 添加到 i 变量 (i++) 是由 for 循环完成的,因此您不需要这样做。 评论了您的行并在更正下方。

            // int[] data;
            int data;
            string str1 = "";
            int size;
            Console.WriteLine("\n Input array size:");
            size = int.Parse(Console.ReadLine());
            if (size >= 1 && size <= 9) {
                //data = new int[size];
                //for (int i = 0; i < data.Length; i++) {
                for (int i = 0; i < size; i++) {
                    //data[i] = 111 * (i + 1);
                    data = 111 * (i + 1);
                    //foreach (int num in data) {
                    // str1 += "\n data[" + i.ToString() + "] =" + num.ToString() + "\n";
                    str1 += "\n data[" + i.ToString() + "] =" + data.ToString() + "\n";
                    //}
                    // i++;
                }
                Console.WriteLine("{0}", str1);
            }
            else
                Console.WriteLine("Out of range!");

Output:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM