我刚刚学习多维数组和消息框。我目前在消息框中创建2列时遇到问题。我现在可以打印出我需要的随机数,但只能在一列中打印出来。谢谢你的帮助!
string msg = "";
Random numb = new Random();
int[,] thing = new int[ 10, 2 ];
thing[0, 0] = numb.Next(0,10);
thing[0, 1] = numb.Next(0,10);
thing[1, 0] = numb.Next(0,10);
thing[1, 1] = numb.Next(0,10);
thing[2, 0] = numb.Next(0,10);
thing[2, 1] = numb.Next(0,10);
thing[3, 0] = numb.Next(0,10);
thing[3, 1] = numb.Next(0,10);
thing[4, 0] = numb.Next(0,10);
thing[4, 1] = numb.Next(0,10);
thing[5, 0] = numb.Next(0,10);
thing[5, 1] = numb.Next(0,10);
thing[6, 0] = numb.Next(0,10);
thing[6, 1] = numb.Next(0,10);
thing[7, 0] = numb.Next(0,10);
thing[7, 1] = numb.Next(0,10);
thing[8, 0] = numb.Next(0,10);
thing[8, 1] = numb.Next(0,10);
thing[9, 0] = numb.Next(0,10);
thing[9, 1] = numb.Next(0,10);
foreach (int x in thing)
msg = msg + x + "\n";
MessageBox.Show(msg, "Table");
答案 0 :(得分:0)
我怀疑这个问题与现有问题重复,但我找不到合适的先例。所以,也许我们需要一个解释如何格式化二维数组输出的答案。这是一个答案。 :)
首先要记住的是,使用MessageBox
显示此内容的事实几乎不相关。您真正询问的是如何将二维数组格式化为字符串,其中该字符串包含数据中行之间的换行符,并且列在输出中排成一行。拥有该字符串后,您可以在任何使用固定空间字体的上下文中显示(实际上不是 MessageBox
...但是创建自己的{{1}并不困难用作消息框,您可以在其中指定用于显示文本的字体)并使输出显示为您似乎要求的内容。
例如,这是一个可以执行您想要的控制台程序:
Form
请注意,我已将数组的初始化和值的格式合并为一段代码。我还使用嵌套的static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
Random random = new Random();
int[,] array = new int[10, 2];
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
array[i, j] = random.Next(10);
if (j > 0)
{
sb.Append(", ");
}
sb.Append(array[i, j]);
}
sb.AppendLine();
}
Console.WriteLine(sb);
}
循环来索引数组中的每个元素;这允许两件事:
在您的示例中,您的随机数只是一个数字。但是,如果您想要格式化数字位数可能不同的数字,您可能希望使用空格填充输出较短的数字,以便输出列中的数字排成一行。您可以通过向输出添加宽度说明符来实现,如下所示:
for
在上面,我没有像前面的代码示例那样使用默认格式,而是明确指定一种格式(并调用 sb.AppendFormat("{0,2}", array[i, j]);
而不是AppendFormat()
来执行此操作),并在格式,我已经包含文本Append()
,以表明我希望输出字符串的最小宽度为两个字符。该方法将根据需要添加空格以确保。
我也从简单的字符串连接改为使用,2
。在你的原始例子中,字符串连接可能并不可怕,但它也不是一个好习惯。当您在循环中重复附加文本时,应始终使用StringBuilder
。否则,可能会产生过多的对象,并且可能花费过多的时间来复制字符数据。使用StringBuilder
可以更有效地连接文本。
答案 1 :(得分:0)
改变这个:
foreach (int x in thing)
msg = msg + x + "\n";
MessageBox.Show(msg, "Table");
致:
for (int i = 0; i < thing.GetLength(0); i++)
msg += String.Format("{0} {1}\n", thing[i, 0], thing[i, 1]);
//msg += thing[i, 0] + " " + thing[i, 1] + "\n";
MessageBox.Show(msg, "Table");
说明:
方法GetLength(0)
返回x
的维度长度(对于简单数组,它基本上类似array.Length
但具有特定维度),我们使用i
变量和{{1循环迭代它。在for
中,我们只有2个元素,因此我们只能使用y
和[0]
索引,因为我们知道只有两个元素。这解释了这一行:
[1]
小心连接这样的字符串,好像你没有在你的数字之间添加这个空间msg += thing[i, 0] + " " + thing[i, 1] + "\n";
编译器只会添加它们,所以像" "
这样的元素将连接成字符串,如:{ {1}}代替[33, 10]
。
P.S。
因此,让我们使用"43 \n"
方法确保其格式正确:
"33 10 \n"