我想比较两个数组,看看它们是否具有相同的值。
如果我有一个名为
的数组public static float data[][]
保存地形的Y坐标,如何用另一个
检查该数组public static int coords[][]
没有遍历所有坐标?
两个阵列都有超过1000个值。迭代它们不是一种选择,因为我必须每秒迭代它们四次。
我这样做是为了试图找出两个物体是否发生碰撞。我曾尝试使用库,但我找不到每个坐标的碰撞检测,因为我需要它。
编辑:为什么我无法迭代这个少量的顶点是这样的。 问题是,这是一个MultiPlayer游戏,我必须遍历每个玩家的所有1000个坐标。这意味着在线只有10名玩家是10,000 100在线是10万。你可以看到它会多么容易滞后或者至少占用很大比例的CPU。
将坐标输入到"数据"变量:
try {
// Load the heightmap-image from its resource file
BufferedImage heightmapImage = ImageIO.read(new File(
"res/images/heightmap.bmp"));
//width = heightmapImage.getWidth();
//height = heightmapImage.getHeight();
BufferedImage heightmapColour = ImageIO.read(new File(
"res/images/colours.bmp"));
// Initialise the data array, which holds the heights of the
// heightmap-vertices, with the correct dimensions
data = new float[heightmapImage.getWidth()][heightmapImage
.getHeight()];
// collide = new int[heightmapImage.getWidth()][50][heightmapImage.getHeight()];
red = new float[heightmapColour.getWidth()][heightmapColour
.getHeight()];
blue = new float[heightmapColour.getWidth()][heightmapColour
.getHeight()];
green = new float[heightmapColour.getWidth()][heightmapColour
.getHeight()];
// Lazily initialise the convenience class for extracting the
// separate red, green, blue, or alpha channels
// an int in the default RGB color model and default sRGB
// colourspace.
Color colour;
Color colours;
// Iterate over the pixels in the image on the x-axis
for (int z = 0; z < data.length; z++) {
// Iterate over the pixels in the image on the y-axis
for (int x = 0; x < data[z].length; x++) {
colour = new Color(heightmapImage.getRGB(z, x));
data[z][x] = setHeight;
}
}
}catch (Exception e){
e.printStackTrace();
System.exit(1);
}
如何将坐标放入&#34; coords&#34;变量(哦等等,它被称为&#34; Ship&#34;,而不是coords。我忘记了):
try{
File f = new File("res/images/coords.txt");
String coords = readTextFile(f.getAbsolutePath());
for (int i = 0; i < coords.length();){
int i1 = i;
for (; i1 < coords.length(); i1++){
if (String.valueOf(coords.charAt(i1)).contains(",")){
break;
}
}
String x = coords.substring(i, i1).replace(",", "");
i = i1;
i1 = i + 1;
for (; i1 < coords.length(); i1++){
if (String.valueOf(coords.charAt(i1)).contains(",")){
break;
}
}
String y = coords.substring(i, i1).replace(",", "");;
i = i1;
i1 = i + 1;
for (; i1 < coords.length(); i1++){
if (String.valueOf(coords.charAt(i1)).contains(",")){
break;
}
}
String z = coords.substring(i, i1).replace(",", "");;
i = i1 + 1;
//buildx.append(String.valueOf(coords.charAt(i)));
////System.out.println(x);
////System.out.println(y);
////System.out.println(z);
//x = String.valueOf((int)Double.parseDouble(x));
//y = String.valueOf((int)Double.parseDouble(y));
//z = String.valueOf((int)Double.parseDouble(z));
double sx = Double.valueOf(x);
double sy = Double.valueOf(y);
double sz = Double.valueOf(z);
javax.vecmath.Vector3f cor = new javax.vecmath.Vector3f(Float.parseFloat(x), Float.parseFloat(y), Float.parseFloat(z));
//if (!arr.contains(cor)){
if (cor.y > 0)
arr.add(new javax.vecmath.Vector3f(cor));
if (!ship.contains(new Vector3f((int) sx, (int) sy, (int) sz)))
ship.add(new Vector3f((int) sx, (int) sy, (int) sz));
// arr.add(new javax.vecmath.Vector3f(Float.parseFloat(x),Float.parseFloat(y),Float.parseFloat(z))); } 谢谢!
答案 0 :(得分:1)
您可以这样做,但仅适用于相同的数据类型。
Arrays.deepEquals(data, coords);
对于单维数组,您可以使用此
Arrays.equals(array1, array1);
答案 1 :(得分:1)
Arrays.deepEquals(a, b);
试试这个,但这只有在元素有序的情况下才有效。
答案 2 :(得分:0)
无所事事,我害怕。根据定义,比较数据集以查看它们是否相同,需要查看所有元素。另外,即使在相对较旧的硬件上,也不会比较1000个值。你每秒可以做几千次。