我想比较两个数组.
我初始化它们:
public static int [][] craftarray = {{0,0,0},{0,0,0},{0,0,0}};
public static int [][] stone = {{0,0,0},{0,0,0},{0,0,0}};
当我试图比较它们时使用:
Inventory.craftarray.equals(Craft.stone)
它没有说它们是平等的所以我打印出阵列.
工艺阵列以0的形式返回,而石头返回'[[@ @ 44ffb2'.
为什么会这样?
而是使用,Arrays.deepEquals(Object[] a, Object[] b).这将使用该Object.equals()方法逐个元素地进行比较,如果遇到新数组则递归地进行.
您的代码不起作用的原因是因为没有equals()针对数组的特殊实现.因此,true调用时不会产生两个具有相同内容的不同数组equals.
基本上,这可以通过使用来解决Arrays.equals().这将通过在数组的每个对象上使用equals进行比较.但是,由于您使用的是数组数组,因此您将再次面临同样的问题.那是Arrays.deepEquals()进来的地方.
上下文感知评论:请注意,Minecraft风格的制作不要求模式位于特定位置.例如,可以在工艺台上的6个不同位置制作手电筒(顶部带有煤的棒).这意味着deepEquals()没有帮助.我建议你用一些智能算法编写自己的方法来完成这项工作.这里(在github上)是我的一个老项目,我在那里做了同样的伎俩.看看equalsRecipe()我写的方法.