如果我有1到100位数,我应该得到
的输出1--100
2--99
3--98
.
..
..
49---50
代码低于其给定索引的界限,数组没有多维度
static void Main(string[] args)
{
//// A. 2D array of strings.
string[][] a = new string[100][];
int bound0 = a.GetUpperBound(0);
int bound1 = a.GetUpperBound(1);
for (int i = 0; i <= bound0; i++)
{
for (int x = 100; x <= bound1; x--)
{
string s1 = a[i][x];
Console.WriteLine(s1);
}
}
Console.WriteLine();
Console.ReadKey();
}
答案 0 :(得分:5)
您需要为数组提供第二个维度。在内部循环中,您递减loop
变量而不是递增,这也会导致超出范围的异常。您可能需要知道锯齿状和二维数组之间的区别。 post可以解释这一点。
这个语句int bound1 = a.GetUpperBound(1);由于尚未声明第二个维度,因此给出了异常。
使用锯齿状数组。
string[][] a = new string[100][];
int bound0 = a.GetUpperBound(0);
for(int i = 0; i <= bound0; i++)
a[i] = new string[3];
for (int i = 0; i <= bound0; i++)
{
int bound1 = a[i].GetUpperBound(0);
for (int x = 0; x <= bound1; x++)
{
a[i][x] = (i + x).ToString();
string s1 = a[i][x];
Console.WriteLine(s1);
}
}
使用二维数组。
string[,] a = new string[100,4];
int bound0 = a.GetUpperBound(0);
int bound1 = a.GetUpperBound(1);
for (int i = 0; i < bound0; i++)
{
for (int x = 0; x < bound1; x++)
{
a[i,x] = (i+x).ToString();
string s1 = a[i,x];
Console.WriteLine(s1);
}
}
Console.WriteLine();
Console.ReadKey();
修改,基于更新
string[][] a = new string[100][];
int bound0 = a.GetUpperBound(0);
for(int i = 0; i <= bound0; i++)
a[i] = new string[100];
for (int i = 0; i <= bound0; i++)
{
int bound1 = a[i].GetUpperBound(0);
for (int x = bound1; x >= 0; x--)
{
a[i][x] = (i+1).ToString() +"--"+ (x+1).ToString();
string s1 = a[i][x];
Console.WriteLine(s1);
}
}
答案 1 :(得分:0)
使用a.GetUpperBound(1)=&gt;你已经定义了你没有的阵列的第二个维度 你也在内部for循环中递减x(x--)
下面是您的代码的工作示例,但结果将是空字符串,因为您没有初始化数组
static void Main(string[] args)
{
//// A. 2D array of strings.
string[,] a = new string[100, 4];
int bound0 = a.GetUpperBound(0);
int bound1 = a.GetUpperBound(1);
for (int i = 0; i <= bound0; i++)
{
for (int x = 0; x <= bound1; x++)
{
string s1 = a[i, x];
Console.WriteLine(s1);
}
}
Console.WriteLine();
Console.ReadKey();
}
问候
答案 2 :(得分:0)
您没有创建2D字符串数组。您正在创建的是一个字符串数组数组。这意味着“内部”数组可以具有任何长度,而“外部”数组当然不知道这一点。因此,要么将数组创建为2D(new string[100, something]
),要么稍后请求上限。一个更好的代码就是:
string[][] a = new string[100][];
// Don't forget to create all the subarrays, eg.:
// for (int i = 0; i < a.Length; i ++) a[i] = new string[10];
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < a[i].Length; j++)
{
Console.WriteLine(a[i][j]);
}
}
无论如何,如果你想说的是真的,你就是以一种完全疯狂的方式做到这一点。为什么不这样做呢?
void PrintDigitPairs(int lowerBound, int upperBound)
{
for (int i = lowerBound; i <= lowerBound + upperBound / 2; i++)
{
Console.WriteLine(i + "-" + (upperBound - i + 1));
}
}
答案 3 :(得分:0)
我相信您只希望在x
更大然后绑定时运行第二个循环:
for (int i = 0; i <= bound0; i++)
{
// | change here from <= to >=
for (int x = 100; x >= bound1; x--)
{
string s1 = a[i][x];
Console.WriteLine(s1);
}
}