一个C#二维数组拆分中foreach的问题

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespa... using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace helloworld
{
class Program
{
static void Main(string[] args)
{
int[,] arr1 = new int[2, 5] { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 } };
int[] arr2 = new int[5];
int[] arr3 = new int[5];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 5; j++)
{
switch(i)
{
case 0: arr2[j] = arr1[i, j]; break;
case 1: arr3[j] = arr1[i, j]; break;
}
}
}

Console.WriteLine("拆分前的二维数组为:");
foreach(int i in arr1)
{
Console.Write(i+" ");
if(i==arr1.GetUpperBound(0))
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("拆分后的第一个数组为:");
foreach(int i in arr2)
Console.Write(i+" ");
Console.WriteLine();
Console.WriteLine("拆分后的第二个数组为:");
foreach(int i in arr3)
Console.Write(i+" ");
Console.WriteLine();
Console.ReadLine();
}
}
}
在这个程序中,有这样几行
foreach(int i in arr1)
{
Console.Write(i+" ");
if(i==arr1.GetUpperBound(0))
Console.WriteLine();
}
这是要显示未拆分前的二维数组,想通过foreach中i值与第一维数组的序列号上限的比较,来判断是否输出换行,但是实际运行时总是在输出完1之后就换行了,请问是什么原因?还用这种结构该如何改正才能正常显示?
是否foreach中的i值不能引用或者不确定?
展开
 我来答
你是谁LCqTt
2011-07-06 · TA获得超过602个赞
知道小有建树答主
回答量:604
采纳率:0%
帮助的人:861万
展开全部
arr1.GetUpperBound(0)获取的是第一维的上限(这里为1)
所以总会在输出1后换行,如果你的二维数组里面没有1就不会出现换行.可以改成这样:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace helloworld
{
class Program
{
static void Main(string[] args)
{
int[,] arr1 = new int[2, 5] { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 } };
int[] arr2 = new int[5];
int[] arr3 = new int[5];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 5; j++)
{
switch (i)
{
case 0: arr2[j] = arr1[i, j]; break;
case 1: arr3[j] = arr1[i, j]; break;
}
}
}

Console.WriteLine("拆分前的二维数组为:");
int index = 0;
foreach (int i in arr1)
{
Console.Write(i + " ");
if (index == arr1.GetUpperBound(1))
Console.WriteLine();
index++;
}
Console.WriteLine();
Console.WriteLine("拆分后的第一个数组为:");
foreach (int i in arr2)
Console.Write(i + " ");
Console.WriteLine();
Console.WriteLine("拆分后的第二个数组为:");
foreach (int i in arr3)
Console.Write(i + " ");
Console.WriteLine();
Console.ReadLine();
}
}
}
帐号已注销
2011-07-06 · TA获得超过114个赞
知道答主
回答量:97
采纳率:0%
帮助的人:50.5万
展开全部
你先要弄清楚GetUpperBound(0)代表的是什么意思。
这个方法表示二维数组中,第一维的最大下标。
你定义的是 int[,] arr1 = new int[2, 5] { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 } };
那么,这个数组的维度就是[0,0-4],[1-4].一共十组。(0,0;0,1;0,2;0,3;0,4;1,1;1,2;1,3;1,4;)
所以GetUpperBound(0)的值在你的代码中是1,因为第一维度的最大值为1;就出现了再输出1后换行了。

楼上正解,看错了。原来你是想把原来的数组以
1 2 3 4 5
6 7 8 9 10格式输出

还有foreach中i的值可以引用的,也可以确定。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式