[英]java class instantiated as 2d array
我在oracle Trails的卡片示例中遇到了这一行:
public Cards[][] cards =new Cards[int suits][int ranks];
尽管存在以下差异,但未给出任何解释:
Cards cards=new Cards(int suits,int ranks);
对我来说这是一个新概念。 有人请解释2D数组,或者给我链接到解释这种情况的页面?
链接 2D数组,实际上应该是数组的数组,正在为其元素接受相同类型的分配(一维数组)
int[][] twoD = new int[4][];
twoD[0] = new int[1]{1};
twoD[1] = new int[2]{2,3};
twoD[2] = new int[3]{4,5,6);
twoD[3] = new int[4]{7,8,9,10};
在第一行中,创建Cards类的未初始化实例的二维数组。
每个尺寸的大小由您在花括号中输入的数字定义(不知道为什么在那里需要int
,它甚至可以编译吗?)
您需要使用cards[i][j] = new Cards(suits, ranks);
来初始化每个单元格cards[i][j] = new Cards(suits, ranks);
为了能够访问该单元中的卡。 (其中i
和j
在数组边界内)
第二行是Cards
类的单个实例的创建。 您传递的suits
和ranks
参数是由于Cards
类的构造函数定义而不是2d数组的定义(其中大括号中的值定义了数组每个维度的大小)
该声明
public Cards[][] cards = new Cards[int suits][int ranks];
不会实例化Cards
类型的任何新对象。 但是,它定义了一个新的2D数组来存储Cards
类型的对象。2D数组可以视为棋盘。 在此国际象棋棋盘的每个字段上(大小suits
x ranks
),可以放置Cards
类型的对象。
另一方面,声明
Cards c = new Cards(int suits,int ranks);
将实例化Cards
类型的一个新对象(至少如果用适当的值替换int suits
和int ranks
)。 创建此对象后,可以将其存储在我们定义的2D数组中:
cards[0][0] = c;
该语句会将我们类型为Cards
对象c
放置在棋盘的左上方。
总结起来,二维数组基本上是一个数据容器(如List
),可以存储给定类型的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.