[英]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.