import java.util.*;
class Cube{
int width;
int height;
public Cube(int width, int height){
this.width = width;
this.height = height;
}
public String toString(){
String s = "[" + width + "," + height + "]";
return s;
}
}
class myClass {
public static void main(String[] args) {
LinkedList<Cube>[] myCubes;
myCubes = new LinkedList[3];
myCubes[0] = new LinkedList<Cube>();
myCubes[1] = new LinkedList<Cube>();
myCubes[2] = new LinkedList<Cube>();
myCubes[0].add(new Cube(5,2));
myCubes[0].add(new Cube(3,6));
myCubes[1].add(new Cube(3,3));
myCubes[1].add(new Cube(2,2));
myCubes[2].add(new Cube(1,2));
myCubes[2].add(new Cube(5,9));
}
}
我知道我有一个数组数组。但是,我无法弄清楚如何从数组中的Cube实例访问单个值。
如果您能帮助展示如何访问单个字段,我将不胜感激。
例如,我如何单独访问值6
myCubes[0].add(new Cube(3,6));
我知道对于单个实例,您使用点运算符,例如
myCubes.width;
myCubes.height;
但是,我不知道如何从一组实例中访问单个字段。
我真的很感谢你的帮助。
谢谢
答案 0 :(得分:0)
正如其他人已经在评论中所示。
我自己试了一下。 如果它是一个数组数组,你可以简单地使用
myCubes[0][1].height
但是由于LinkedList不是数组而是链接列表,因此您需要使用链接列表的get方法从列表中获取元素。
System.out.print(myCubes[0].get(1).height);
答案 1 :(得分:0)
LinkedList<Cube>[] myCubes
...我知道我有一个数组数组
不,这不是数组数组,这是LinkedList的数组。到
myCubes[index]
*someList*.get(index)
。 如果我们将这两者结合起来,我们会得到类似myCubes[0].get(1)
的内容(就像您使用myCubes[0].add(new Cube(3,6));
一样,您需要在列表中使用add
方法 put 立方体)。
但通常我们应该避免泛型类型和数组。数组希望保证它们只保存有效值,因此它们会在运行时检查放置在其中的元素类型,以查看它们是否与数组类型匹配。例如,这段代码将编译:
String[] strArray = new String[10];
Object[] objArr = strArray;
objArr[0] = new Integer(1);
我们将得到 runtime ArrayStoreException
,因为我们试图将Integer放入数组中,该数组应该仅包含字符串(即使我们通过Object[]
引用进行了操作,类型数组仍然是String[]
,因为这是我们在new String[size]
处决定的。
但是泛型的问题在于它们是erased at runtime。因此,可以使用像
这样的代码List<String> strList = new ArrayList<>();
Object o = strList;
List<Integer> intList = (List<Integer>) o;
intList.add(1);
System.out.println(strList);//this prints [1] !!!
因此,当你看到泛型类型不是那么安全时(它的安全性主要存在于编译时),所以数组不喜欢它们,因为它们会降低它们的安全性。
因此,您应该使用另一个列表List<List<Cube>>
而不是数组。这样编译器就不会抱怨混合数组和泛型类型(因为没有更多的数组 - 至少在我们的代码中)。您使用列表的代码可能如下所示:
List<List<Cube>> myCubes = new ArrayList<>();
myCubes.add(new LinkedList<>());
myCubes.add(new LinkedList<>());
myCubes.add(new LinkedList<>());
myCubes.get(0).add(new Cube(5,2));
myCubes.get(0).add(new Cube(3,6));
myCubes.get(1).add(new Cube(3,3));
myCubes.get(1).add(new Cube(2,2));
myCubes.get(2).add(new Cube(1,2));
myCubes.get(2).add(new Cube(5,9));
System.out.println(myCubes.get(0).get(1).width);
System.out.println(myCubes.get(0).get(1).height);
System.out.println(myCubes.get(0).get(1));