我的坐标列表:
int[][] coords = {
{3093, 3630 }, {3095, 3632}, {3098, 3633},
{3101, 3633 }, {3104, 3631}, {3106, 3629},
{3107, 3627}, {3108, 3624}, {3109, 3620},
{3108, 3617}, {3106, 3614}, {3102, 3613},
{3099, 3613}, {3097, 3613}, {3093, 3614},
{3090, 3617}, {3087, 3619}
};
生成部分:
int random = Misc.random(coords.length - 1);
handler.move(coords[random][0], coords[random][1], 0);
基本上我要做的是,如果已经采用这些坐标,则重新生成坐标。
因此我创建了一个使用过的coords的arraylist,这是我如何做到这一点的逻辑:
int[][] coords = {
{3093, 3630 }, {3095, 3632}, {3098, 3633},
{3101, 3633 }, {3104, 3631}, {3106, 3629},
{3107, 3627}, {3108, 3624}, {3109, 3620},
{3108, 3617}, {3106, 3614}, {3102, 3613},
{3099, 3613}, {3097, 3613}, {3093, 3614},
{3090, 3617}, {3087, 3619}
};
ArrayList<Integer> coordinates = new ArrayList<Integer>();
int random = Misc.random(coords.length - 1);
if (getPlayersCount() < coords.length) {
if (coordinates.contains(coords[random][0], coords[random][1])) {
random = Misc.random(coords.length - 1);
}
else {
handler.move(coords[random][0], coords[random][1], 0);
coords.add(coords[random][0], coords[random][1]);
}
}
else {
random = Misc.random(coords.length - 1);
handler.move(coords[random][0], coords[random][1], 0);
}
基本上,如果玩家的数量少于数组长度,则进程。 如果坐标arraylist包含生成的X,Y,则重新生成它,否则移动播放器并将坐标添加到列表中。
但似乎我做错了,因为我收到了这个错误:error: no suitable method found for contains(int,int)
我该怎么做?
答案 0 :(得分:7)
ArrayList#contains
将Object
与列表中包含的对象进行比较...
如果此列表包含指定的元素,则返回true。更多 正式地,当且仅当此列表包含至少一个时才返回true 元素e使得(o == null?e == null:o.equals(e))。
您的列表包含int
的数组,这些数组不易比较。
如果您使用Object
方法能够比较其他类似对象的坐标,equals
会更容易。有点像...
public class Coordinate {
private int latitude;
private int longitude;
public Coordinate(int latitude, int longitude) {
this.latitude = latitude;
this.longitude = longitude;
}
public int getLatitude() {
return latitude;
}
public int getLongitude() {
return longitude;
}
public boolean equals(Object value) {
boolean equals = false;
if (value instanceof Coordinate) {
Coordinate coord = (Coordinate) value;
equals = getLatitude() == coord.getLatitude() && getLongitude() == coord.getLongitude();
}
return equals;
}
//good practice to override hashcode when you override equals
public int hashcode() {
int hash = 7;
hash = 89 * hash + this.latitude;
hash = 89 * hash + this.longitude;
return hash;
}
}
然后你可以使用更像......
的东西Coordinate[] coords = {
new Coordinate(3093, 3630 ), new Coordinate(3095, 3632), new Coordinate(3098, 3633),
new Coordinate(3101, 3633 ), new Coordinate(3104, 3631), new Coordinate(3106, 3629),
new Coordinate(3107, 3627), new Coordinate(3108, 3624), new Coordinate(3109, 3620),
new Coordinate(3108, 3617), new Coordinate(3106, 3614), new Coordinate(3102, 3613),
new Coordinate(3099, 3613), new Coordinate(3097, 3613), new Coordinate(3093, 3614),
new Coordinate(3090, 3617), new Coordinate(3087, 3619)
};
ArrayList<Coordinate> coordinates = new ArrayList<Coordinate>();
int random = Misc.random(coords.length - 1);
if (getPlayersCount() < coords.length) {
Coordinate coord = new Coordinate(coords[random].getLatitude(), coords[random].getLongitude());
if (coordinates.contains(coord)) {
random = Misc.random(coords.length - 1);
}
else {
handler.move(coords[random].getLatitude(), coords[random].getLongitude(), 0);
coordinates.add(coords[random]);
}
}
else {
random = Misc.random(coords.length - 1);
handler.move(coords[random].getLatitude(), coords[random].getLongitude(), 0);
}