我有一个2D数组,我随机填充数字。我为此工作的代码很好,但是,为了更好地组织我的代码,我想把“随机填充数字”部分放入方法中。
该数组是从Main()方法创建的,因为我计划将数组传递给其他将操纵它的方法并从中返回。然后我尝试编写填充数组的方法,但我不确定如何传递多维数组,或者返回一个。根据MSDN,我需要使用“out”而不是返回。
这是我到目前为止所尝试的:
static void Main(string[] args)
{
int rows = 30;
int columns = 80;
int[,] ProcArea = new int[rows, columns];
RandomFill(ProcArea[], rows, columns);
}
public static void RandomFill(out int[,] array, int rows, int columns)
{
array = new int[rows, columns];
Random rand = new Random();
//Fill randomly
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < columns; c++)
{
if (rand.NextDouble() < 0.55)
{
array[r, c] = 1;
}
else
{
array[r, c] = 0;
}
}
}
这些是我的错误:
"The best overloaded method match for 'ProcGen.Program.RandomFill(out int[*,*], int, int)' has some invalid arguments"
"Argument 1: cannot convert from 'int' to 'out int[*,*]'"
我做错了什么,我该怎么做才能解决这些错误?另外,我是正确的思考,因为我正在使用“out”,我需要做的就是:
RandomFill(ProcArea[], rows, columns);
而不是?:
ProcArea = RandomFill(ProcArea[], rows, columns);
是否有正确的方法来调用该方法?
答案 0 :(得分:6)
代码中不需要输出参数。
数组是passed by references
,直到方法为initialise it with new reference
。
因此,在您的方法don't initialise it with new reference
中,您可以不使用out
参数和values will be reflected in an original array
-
public static void RandomFill(int[,] array, int rows, int columns)
{
array = new int[rows, columns]; // <--- Remove this line since this array
// is already initialised prior of calling
// this method.
.........
}
答案 1 :(得分:2)
输出参数也需要在呼叫者方面明确指定为out
:
RandomFill(out ProcArea[], rows, columns);
答案 2 :(得分:2)
尝试:
RandomFill(out ProcArea, rows, columns);
答案 3 :(得分:0)
尝试一下......它有效:)
using System;
class system
{
static void Main(string[] args)
{
int rows = 5;
int columns = 5;
int[,] ProcArea = new int[rows, columns];
RandomFill(out ProcArea, rows, columns);
// display new matrix in 5x5 form
int i, j;
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
Console.Write("{0}\t", ProcArea[i, j]);
Console.WriteLine();
}
Console.ReadKey();
}
public static void RandomFill(out int[,] array, int rows, int columns)
{
array = new int[rows, columns];
Random rand = new Random();
//Fill randomly
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < columns; c++)
{
if (rand.NextDouble() < 0.55)
{
array[r, c] = 1;
}
else
{
array[r, c] = 0;
}
}
}
}
}