【问题标题】:java strange array comparing [duplicate]java奇怪的数组比较[重复]
【发布时间】:2014-01-19 23:04:04
【问题描述】:

我正在尝试比较两个数组。

我初始化它们:

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,而石头返回 '[[I@44ffb2'。

为什么会这样?

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    改为使用Arrays.deepEquals(Object[] a, Object[] b)。这将使用Object.equals() 方法逐个元素进行比较,如果遇到新数组则递归。

    您的代码不起作用的原因是因为没有针对数组的equals() 的特殊实现。因此,两个具有相同内容的不同数组在调用equals 时不会产生true

    基本上,这可以通过使用Arrays.equals() 来解决。这将通过对数组的每个对象使用 equals 进行比较。但是由于您使用的是数组数组,您将再次面临同样的问题。这就是Arrays.deepEquals() 的用武之地。


    上下文感知注释:请注意,Minecraft 风格的制作并不要求图案位于特定位置。例如,火炬(顶部有煤的棍子)可以在工作台上的 6 个不同位置制作。这意味着deepEquals() 不会有帮助。我建议您使用一些智能算法编写自己的方法来完成这项工作。 Here (on github) 是我的一个旧项目,我做了同样的伎俩。看看我写的equalsRecipe()方法。

    【讨论】:

    • 感谢我的世界特定的东西!
    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2019-10-10
    • 2015-02-17
    • 2014-10-22
    • 1970-01-01
    相关资源
    最近更新 更多