gpt4 book ai didi

Java ArrayList removeAll() 不删除

转载 作者:行者123 更新时间:2023-12-01 17:06:57 26 4
gpt4 key购买 nike

我有一个小问题,数组列表中的元素没有被删除。这是一个数组列表。这是我的代码:

package net.lucrecious.armorconstruct.helpers;

import java.util.ArrayList;

import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

public class WorldHelper {

public static void replace_coord_with_block(World world, ArrayList<int[]> coords, Block result_block){

for (int[] c : coords){
world.setBlock(c[0], c[1], c[2], result_block);
}

}

public static ArrayList<int[]> get_blocks_in_sphere(EntityPlayer player, World world, int radius, Class<?>...block_types){

ArrayList<int[]> coord_list = new ArrayList<int[]>();

int r = radius;

int i = MathHelper.floor_double(player.posX);
int j = MathHelper.floor_double(player.posY);
int k = MathHelper.floor_double(player.posZ);
for(int x = -r; x < r; x++){
for(int y = -r; y < r; y++){
for(int z = -r; z < r; z++){
double dist = MathHelper.sqrt_double((x*x + y*y + z*z)); //Calculates the distance

if(dist > r)
continue;

Block block = world.getBlock(i+x, j+y, k+z);

for (Class<?> cls : block_types){
if (cls.isInstance(block)){
coord_list.add(new int[]{i+x, j+y, k+z});
}
}
}
}
}

return coord_list;
}


public static ArrayList<int[]> get_blocks_in_sphere_holo(EntityPlayer player, World world, int radius, Class<?>...block_types){

ArrayList<int[]> sphere = get_blocks_in_sphere(player, world, radius, block_types);

ArrayList<int[]> inner_sphere = get_blocks_in_sphere(player, world, radius-1, block_types);

sphere.removeAll(inner_sphere);

return sphere;
}

public static ArrayList<int[]> get_blocks_in_sphere_filled(EntityPlayer player, World world, int radius, Class<?>...block_types){
return get_blocks_in_sphere(player, world, radius, block_types);
}


}

这个想法是获取填充球体的坐标,然后获取稍小的填充球体的坐标并删除相似的坐标,从而有效地生成未填充的球体。

我知道里面有一些我的世界代码 - 但它仍然应该是可以理解的。我也确信会有类似的坐标。我什至尝试过,半径没有减小,但这仍然不起作用。因此,即使所有坐标都相同,这也不起作用。

关于造成这种情况的原因或如何使其发挥作用有什么想法吗?

最佳答案

当您调用removeAll()时,java将从列表中删除与您作为参数传递的列表中的任何条目相同的条目。问题是,两个数组永远不会相等,除非它们是完全相同的数组实例,但在您的代码中它们并非如此。

您可以使用包装类来包含 int 数组,它会覆盖 equals() 方法并使用 Arrays.equals(array1, array2) 来比较两个数组为了平等。

关于Java ArrayList removeAll() 不删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25150648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com