有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何搜索内容与另一个匹配的数组?

我有一个int数组的ArrayList,当我询问它是否包含指定的坐标时,它返回false。它不包含我请求的坐标,因此它应该返回TRUE

这是我的密码

    //debug code
    for (int i = 0; i < Locations.size(); i++)
    {
        int[] TestLoc = Locations.get(i);

        System.out.print(TestLoc[0] + " " + TestLoc[1] + " " + TestLoc[2] + " == " + Location[0] + " " + Location[1] + " " + Location[2] + "? - ");

        if (Location == TestLoc)
        {
            System.out.println("TRUE");
        }

        else
        {
            System.out.println("FALSE");
        }
    }

    //real code
    if (Locations.contains(Location))
    {
        Locations.remove(Location);
    }

    else
    {
        System.out.println("FAIL");
    }

和输出,当列表包含4个坐标时,请求坐标57、64、105

56 64 105==57 64 105?-假的

56 64 106==57 64 105?-假的

56 64 107==57 64 105?-假的

57 64 105==57 64 105?-错误

什么给了


共 (6) 个答案

  1. # 1 楼答案

    Java中的数组是对象

    当您使用==运算符时,您正在比较Location是否与Testloc是相同的数组,而不是相同的数组。您真正想要的是比较每个数组中的值,看看它们是否相等

    您可以使用^{}静态方法来比较两者是否相等,而不是自己编写

  2. # 2 楼答案

    通过将数组与==进行比较,可以检查它们是否是相同的数组。您必须遍历每个数组并检查TestLoc[i]==Location[i]。你也许可以使用。equals(),我不记得java是否有。数组的等于()

  3. # 3 楼答案

    最好是获取一个数据类,例如坐标来存储数据并重写equals方法。如果只存储电话号码,另一个选项是使用字符串来表示格式良好的电话号码,并使用String类的equals方法

  4. # 4 楼答案

    这对我很有用:

    List<int[]> l = new ArrayList<int[]>();
        l.add(new int[] {56, 64, 105});
        l.add(new int[] {56, 64, 105});
        l.add(new int[] {56, 64, 105});
        for (int i = 0; i < l.size(); i++)
        {
            int[] t = l.get(i);
    
            if (l.get(i) == t)
            {
                System.out.println("TRUE");
            }
    
            else
            {
                System.out.println("FALSE");
            }
        }
    
  5. # 5 楼答案

    Java的数组相等是标识相等。您需要创建一个实际的Coordinate

    换句话说:

    int[] c1 = new int[] { 1, 2 };
    int[] c2 = new int[] { 1, 2 };
    System.out.println(c1.equals(c2)); // prints false
    
  6. # 6 楼答案

    问题似乎与以下行有关:

    if (Location == TestLoc)
    

    据推测,TestLoc是一个整数数组,Location也绑定到一个数组

    如果TestLocLocation变量都指向同一个数组实例,则上述测试将仅返回true;如果这两个变量指向不同的数组实例且恰好在相同位置具有相同整数,则不会返回true。您正在测试上面的“引用相等”,只询问这两个事物是否相同事物——而不是“值相等”,即询问两个事物是否相等而不管它们是否在计算机内存空间中表示为两个不同的对象

    有些编程语言没有这样的区别,有些语言允许定义新类型,这些类型被更好地视为值,其中标识不重要,而不是实体,其中标识可能比任何可能的值等价更重要。Java使用一个独特的方法Object#equals()来查询Object实例的等价性或值相等性,而==操作符总是只做一件事:它计算任意两个对象的值相等性,即使它们是对象引用

    因此,当您在这里比较两个数组实例时,Object操作符询问的不是这些引用指向的两个对象是否相等,而是引用本身值是否相等。如果它们恰好指向同一个目标对象,那么它们是等价的,但是如果它们没有,那么两个不同的目标对象在值上是否相似并不重要==返回false,因为两个目标对象由不同的引用表示