当我向老师请求帮助时,我得到了这行代码,但是在最后一部分下面我得到了一条红线。可能有什么不对?错误消息:“表达式的类型必须是数组类型,但它已解析为ArrayList”我不明白,请帮助我理解。
ArrayList<Point>[] touchPoints = new ArrayList<Point>()[2];
我想要两个名单来保存积分。我想我会将每个列表称为touchPoints[0];
和touchPoints[1];
!?
编辑:
我想我可以保持简单,只需使用两个不同的List!?:
points1 = new ArrayList<Point>();
points2 = new ArrayList<Point>();
答案 0 :(得分:2)
您已经创建了一个ArrayLists数组。该演示展示了它们如何一起使用
import java.util.ArrayList;
public class ArraysAndLists {
public static void main(String[] args) {
ArrayList<String>[] touchPoints = new ArrayList[2];
// Adding values
touchPoints[0] = new ArrayList<String>();
touchPoints[0].add("one string in the first ArrayList");
touchPoints[0].add("another string in the first ArrayList");
touchPoints[1] = new ArrayList<String>();
touchPoints[1].add("one string in the second ArrayList");
touchPoints[1].add("another string in the second ArrayList");
// touchPoints[2].add("This will give out of bounds, the array only holds two lists");
// Reading values
System.out.println(touchPoints[0].get(0)); // returns "one string in the first ArrayList"
System.out.println(touchPoints[1].get(1)); // returns "another string in the second ArrayList"
}
}
答案 1 :(得分:1)
查看此Question
数组对象的组件类型可能不是类型变量或参数化类型,除非它是(无界)通配符类型。您可以声明其元素类型是类型变量或参数化类型的数组类型,但不能数组对象。
答案 2 :(得分:1)
你混合了两件事:
普通数组的级别非常低。没有方法,并且在创建它之后它的长度是固定的。
MyType[] anArray = new MyType[10];
ArrayList只是一种Collection
的实现Collection<MyItemType> aCollection = new ArrayList<MyItemType>();
您需要一个简单的集合数组(其实现是ArrayList)。所以:
// Create the array, use the interface in case you need to change the implementation later on
Collection<Point>[] touchPoints = (Collection<Point>) new Collection[2];
// Create each collection within that array, using the ArrayList implementation
touchPoints[0] = new ArrayList<Point>();
touchPoints[1] = new ArrayList<Point>();
尝试思考为什么需要普通数组:
根据您的用例进行编辑:
只需创建一个类来保存用户输入:
class UserInput {
public UserInput() {
user1TouchPoints = new ArrayList<Point>();
user2TouchPoints = new ArrayList<Point>();
}
// Add accessors and all
private Collection<Point> user1TouchPoints;
private Collection<Point> user2TouchPoints;
}
如果您打算有更多玩家,只需使用地图
class UserInput {
public UserInput() {
usersTouchPoints = new HashMap<Integer, Collection<Point>>();
}
public Collection<Point> getUserTouchPoints(Integer userId) {
return usersTouchPoints.get(userId);
}
public void addUserTouchPoints(Integer userId, Collection<Point> input) {
Collection<Point> points = usersTouchPoints.get(userId);
if (points==null) {
points = new ArrayList<Point>();
userTouchPoints.put(userId, points);
}
points.addAll(input);
}
// Maps a user ID (or index) to its touch points
// If you are using Android, use SparseArray instead of Map, this is more efficient
private Map<Integer, Collection<Point>> usersTouchPoints;
}