Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Contains方法未提供正确的输出_Java_Arraylist_Contains - Fatal编程技术网

Java Contains方法未提供正确的输出

Java Contains方法未提供正确的输出,java,arraylist,contains,Java,Arraylist,Contains,我正在使用contains方法检查列表中是否存在给定的坐标。上述代码的输出应该是“Yes”,但我得到的是“NO”。有人能帮我吗 类点{ 公共int x; 公共智力; 公共点(整数x,整数y){ 这个.x=x; 这个。y=y; } } GFG类{ 公共静态void main(字符串[]args){ ArrayList点=新的ArrayList(); 点p=新点(1,1); 点q=新点(2,2); 增加(p)点; 增加(q)点; 如果(点包含(新点(1,1))){ System.out.printl

我正在使用
contains
方法检查列表中是否存在给定的坐标。上述代码的输出应该是
“Yes”
,但我得到的是
“NO”
。有人能帮我吗

类点{
公共int x;
公共智力;
公共点(整数x,整数y){
这个.x=x;
这个。y=y;
}
}
GFG类{
公共静态void main(字符串[]args){
ArrayList点=新的ArrayList();
点p=新点(1,1);
点q=新点(2,2);
增加(p)点;
增加(q)点;
如果(点包含(新点(1,1))){
System.out.println(“是”);
}
否则{
系统输出打印项次(“否”)``
}
}
}
对于
包含的方法:

如果此列表包含指定的元素,则返回true。更多 形式上,当且仅当此列表至少包含一个 元素e使得(o==null?e==null:o.equals(e))

您尚未重写
类方法
equals
hashcode
,因此
包含的
方法仍然引用
对象equals
方法;因此,您正在比较两个坐标相等的对象的两个不同引用,然后解释了
包含
方法的的否定结果:

如果此列表包含指定的元素,则返回true。更多 形式上,当且仅当此列表至少包含一个 元素e使得(o==null?e==null:o.equals(e))


您尚未重写
类方法
equals
hashcode
,因此
包含的
方法仍然引用
对象equals
方法;因此,您将两个不同的引用与坐标相等的两个对象进行比较,然后解释了
包含
的否定结果X和Y坐标对于您要比较的对象是相同的,但对象彼此不同。请参见下面的屏幕截图,调试时,您可以看到对象的id。即使坐标相同,对象也不同:

p
Main$points@487
但是
sameOrNot
Main$points@489
。所以,因为您直接比较对象,所以结果是错误的

要实现所需操作,需要在类中重写
equals()
hashCode()
,以指定坐标相同时,对象相同:

class points{
    public int x;
    public int y;

    public points(int x,int y){
        this.x=x;
        this.y=y;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        points points = (points) o;
        return x == points.x &&
                y == points.y;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
}

要比较的对象的X和Y坐标相同,但对象彼此不同。请参见下面的屏幕截图,调试时,您可以看到对象的id。即使坐标相同,对象也不同:

p
Main$points@487
但是
sameOrNot
Main$points@489
。所以,因为您直接比较对象,所以结果是错误的

要实现所需操作,需要在类中重写
equals()
hashCode()
,以指定坐标相同时,对象相同:

class points{
    public int x;
    public int y;

    public points(int x,int y){
        this.x=x;
        this.y=y;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        points points = (points) o;
        return x == points.x &&
                y == points.y;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
}

您需要为
points
类实现hashcode和equals方法。new关键字将创建一个新对象。尝试检查点。包含(p)点。包含(p)点给出正确答案。但是,问题仍然是,为什么这不起作用是的,谢谢代码模式!!您需要为
points
类实现hashcode和equals方法。new关键字将创建一个新对象。尝试检查点。包含(p)点。包含(p)点给出正确答案。但是,问题仍然是,为什么这不起作用是的,谢谢代码模式!!这完全消除了我的疑虑。谢谢你,兄弟!!不客气,我很高兴这是有帮助的。)当你解决问题时,请考虑赞成或接受一个答案。这完全消除了我的疑虑。谢谢你,兄弟!!不客气,我很高兴这是有帮助的:请考虑投票或/接受一个答案,当它解决了你的问题。