我知道它们用于存储数据,但我很难理解如何在程序中使用它们。
此外,我发现this网站上有一个俄罗斯方块克隆教程(缺少实际教程)。它使用数组,但我无法理解它是如何工作的。
以下是代码示例 -
public int[, ,] TShape = new int[4, 4, 2]
{
{{1, 0}, {0, 1}, {1, 1}, {2, 1}},
{{1, 0}, {0, 1}, {1, 1}, {1, 2}},
{{0, 0}, {1, 0}, {2, 0}, {1, 1}},
{{0, 0}, {0, 1}, {1, 1}, {0, 2}}};
可能是因为我看起来太难了,或者有些东西我没有理解它?
答案 0 :(得分:9)
如果以这种方式格式化会更清楚:
public int[, ,] TShape = new int[4, 4, 2]
{
{ {1, 0}, // <- this is int[2]
{0, 1},
{1, 1},
{2, 1} }, // <- the last four lines are an int[4,2]
{ {1, 0},
{0, 1},
{1, 1},
{1, 2} }, // <- another int[4,2]
{ {0, 0},
{1, 0},
{2, 0},
{1, 1} }, // <- third int[4,2]
{ {0, 0},
{0, 1},
{1, 1},
{0, 2} } // <- fourth and last int[4,2]
}; // <- The whole thing is int[4, 4, 2]
答案 1 :(得分:3)
“好吧,我一直很难过 了解如何使用数组。一世 知道它们用于存储数据, 但我还没有找到任何资源 这给出了一个更明确的解释 该“。
我会尝试给你一个类比:数组是像文件柜一样编程到办公室。唯一的区别是文件柜仅限于它可以容纳的内容:即文件......数组的唯一限制是它必须保存相同类型的项目,但项目的实际类型可以接近任何。数组不仅可以保存数据,还可以保存对象,其他数组,其他容器等。
那么在编程中你可以用一个数组做什么?好吧很多的东西!我们来看几个例子:
数组的主要目的是包含各种的东西并允许我们迭代它们。例如:
// Financial
int[] stockPrices = new int[4]{ 15, 14, 18, 16 }; // contains four prices
foreach( int price in stockPrices )
{
MakeTransaction(price);// calls a function that makes a transaction at the price: e.g. buy/sell
}
// Gaming
3DModel[] gameModels = new 3DModel[4]{ new Tank(), new Truck(), new Soldier(), new Building()}; // contains 3D models
foreach( 3DModel model in gameModels )
{
model.Draw();// calls a function of each 3DModel that draws the model on the screen
}
// Military
Target[] targets = new Target[4]{ new Tank(), new Helicopter(), new APC(), new Truck()}; // contains targets
foreach( Target target in targets )
{
Attack(target);// calls an attack function which initiates an attack on each target
}
可能性无穷无尽!数组是容器的子集,容器是编程的一个组成部分。这有帮助吗?
答案 2 :(得分:2)
直接离开马的嘴:http://msdn.microsoft.com/en-us/library/system.array.aspx
等在线教程后,这些详细信息将派上用场答案 3 :(得分:0)
想象一下,你有10个盒子。现在你想清楚告诉别人你正在谈论哪个盒子。所以你为它们分配数字,从0到9.你现在拥有的是一个盒子数组,定义为:
框[10]
括号中的数字告诉您,其中有多少。默认情况下,它们的编号从0到9(某些语言允许更改此值,但现在暂时跳过它)。所以,如果你在谈论第五个盒子,它的盒子[4](因为我们从0开始索引!)。现在想象一下你打开盒子,看到里面有五个球。这定义了一个数组:
框[10] [5]
二维数组。你怎么告诉你的朋友你想谈哪个球?再次,你给他们编号,这次从0到4.如何指定在第七个方框中说出第三个球?简单:方框[6] [2]。等等。希望有所帮助。
答案 4 :(得分:0)
在你的问题中,你说的是使用阵列的俄罗斯方块游戏。无论您使用何种语言,都可以很好地使用数组。
你必须看到俄罗斯方块游戏码作为阵列。假设这个游戏场在X轴上是20个空间,在Y轴上是100个空格。什么告诉你是否在空格上有一个片段,就是当你有一个整数值1,并且你得到一个空格的整数值0。然后我们得到:
var tetrisPlayYard = new int[20][100];
您现在必须将电路板的每个位置初始化为0,以便将它们标记为空格,因此尚未放置任何碎片。
for(int xAxisIndex = 0; xAxisIndex < tetrisPlayYard.GetLength(0); ++xAxisIndex )
for (int yAxisIndex = 0; yAxisIndex < tetrisPlayYard.GetLength(1); ++ yAxisIndex)
tetrisPlayYard[xAxisIndex][yAxisIndex] = 0;
我们现在知道,当每个阵列的位置都设置为0时,没有任何碎片。
然后,当我们放置时,让我们说在板的右下方水平四行直线,然后我们必须处理4个空格,并将它们的值设置为1以指示这些空间上有一块
tetrisPlayYard[19][99] = 1;
tetrisPlayYard[18][99] = 1;
tetrisPlayYard[17][99] = 1;
tetrisPlayYard[16][99] = 1;
这表示你有一个四个直线的空格。你的算法应该解决这个逻辑,以便在玩游戏时显示条形图,立方体等。
总之,只要知道有限空间就使用数组,并且您知道不需要动态调整它的大小。否则,应使用Collection
。