大家好,可以像这个例子一样限制数组大小
现在我只想展示其中的6个。
到目前为止,我所做的是
CustomClass
const int MAX = 104; // = 8 decks * 52 cards / 4cardsoneround
const int Y = 6;
int[,] arrayRoad = new int[Y, X];
public int[,] GetRoad(int x) {
arrayRoad = new int[x, 6];
return arrayRoad;
}
现在我在 MainClass 上显示它
ScoreBoard bsb = new ScoreBoard();
private void Road()
{
bsb.makeRoad(history); // Road
int[,] arrayRoad = bsb.GetRoad(6); //<--- sample value 6
string s = "";
for (int y = 0; y < arrayRoad.GetLength(0); y++)
{
//just 27 for now
for (int x = 0; x < 28; x++)
{
s += string.Format("{0:D2}",arrayRoad[y, x]);
s += ".";
}
s += "\n";
}
Debug.Log(s);
}
此代码的问题在于它给了我Array out of index
这可能吗?
public int[,] GetRoad(int x = MAX,int y = Y) {
arrayRoad = new int[y, x];
return arrayRoad;
}
Max = 104
和Y = 6
int[,] arrayRoad = bsb.GetRoad(12,6); //12 rows and 6 in height
string s = "";
for (int y = 0; y < arrayRoad.GetLength(0); y++)
{
for (int x = 0; x < arrayRoad.GetLength(1); x++)
{
s += string.Format("{0:D2}",arrayRoad[y, x]);
s += ".";
}
s += "\n";
}
Debug.Log(s);
}
在执行更新代码之前,我已经拥有了所有这些值
现在,当我在这里执行更新的代码时,我得到了什么
预期结果必须是此
在那个黑色标记内部,必须显示那些十二列,因为我在我的
上声明了int[,] arrayRoad = bsb.GetRoad(12,6);
答案 0 :(得分:2)
请注意:
public int[,] GetBigEyeRoad(int x) {
arrayRoad = new int[x, 6]; // <-------------
return arrayBigEyeRoad;
你要将数组第二维的长度固定为6。
for (int x = 0; x < 28; x++)
{
s += string.Format("{0:D2}",arrayBigEyeRoad[y, x]); // <------------
在那里,您尝试在阵列的第二维上访问最多28的索引。 Out of Range
错误来自于此。
答案 1 :(得分:0)
我在这里做的是将旧数组复制到新数组,就像下面的代码一样
int[,] arrayBigRoadResult = new int[6, x];
//copy manually the element references inside array
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < x; j++)
{
arrayBigRoadResult[i, j] = arrayBigRoad[i, j];
}
}
return arrayBigRoadResult;
然后通过这样调用
int[,] arrayRoad = bsb.GetRoad(12);
它只显示12列和6行:)