我试图编写一个需要10个输入并按相反顺序打印的程序。这是我在c#中的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace inverse
{
class Program
{
static void Main(string[] args)
{
int i ;
int[] n = new int[10];
Console.WriteLine("please enter 10 numbers");
for (i = 1; i <= 10; i++)
n[i] =int.Parse(Console.ReadLine());
for (i = 10; i >= 1; i--)
Console.WriteLine(n[i] + " ");
Console.ReadKey();
}
}
}
它没有出现任何错误,但在我尝试调试它时它也无法正常工作。你能帮我吗?
答案 0 :(得分:1)
您需要从0开始到9,反之亦然
for (i = 0; i <= 9 i++)
n[i] =int.Parse(Console.ReadLine());
for (i = 9; i >= 0; i--)
Console.WriteLine(n[i]);
答案 1 :(得分:1)
您应该将第二个for循环更改为:
for (i = 9; i >= 0; i--)
为什么?
因为你的循环不正确,i
从10开始。在每次迭代中,它递减,直到i >= 1
。换句话说,i
的值从10变为1.
但这不是阵列的工作方式,是吗? C#中的数组是从0开始的,这意味着第一项是索引0,最后一项是索引(长度 - 1)。在这种特定情况下,最后一项将位于索引9(10 - 1 = 9)!
当您尝试访问索引10处的项时,它当然会抛出异常,因为数组以索引9结束!此外,即使它在索引10处有一个项目,也不会打印数组的第一项,因为循环停在i = 1
。
这就是为什么你希望i
的值从9变为0而不是10到1。
编辑:
我刚刚意识到你犯了另一个错误,你的第一个for循环也是错误的。它应该从0循环到9,而不是1到10.这是正确的版本:
for (int i = 0 ; i <= 9, i++)
或者,您只需添加- 1
:
for (i = 1; i <= 10; i++)
n[i - 1] =int.Parse(Console.ReadLine());
for (i = 10; i >= 1; i--)
Console.WriteLine(n[i - 1] + " ");
答案 2 :(得分:0)
使用以下代码:
static void Main(string[] args)
{
int i;
int[] n = new int[11];
Console.WriteLine("please enter 10 numbers");
for (i = 1; i <= 10; i++)
n[i] = Convert.ToInt32((Console.ReadLine()));
for (i = 10; i >= 1; i--)
Console.WriteLine(n[i] + " ");
Console.ReadKey();
}
问题是当数组从0开始时,数组索引超出范围。当我放弃10个输入时,它给了我错误。