相关疑难解决方法(0)

覆盖java equals()方法 - 不工作?

我遇到了一个有趣(而且非常令人沮丧)的问题,equals()今天的方法导致了我认为是经过良好测试的类崩溃并导致我花了很长时间才能追踪的错误.

为了完整起见,我没有使用IDE或调试器 - 只是老式的文本编辑器和System.out.时间非常有限,这是一个学校项目.

无论如何 -

我开发一个基本的购物车可能包含ArrayListBook对象.为了贯彻落实addBook(),removeBook()以及hasBook()对车的方法,我想检查是否Book已在存在Cart.我走了 -

public boolean equals(Book b) {
    ... // More code here - null checks
    if (b.getID() == this.getID()) return true;
    else return false;
}
Run Code Online (Sandbox Code Playgroud)

一切都在测试中运行良好.我创建了6个对象并用数据填充它们.做了很多添加,删除,has()操作Cart,一切正常.我读到你可以拥有equals(TYPE var)或者equals(Object o) { (CAST) var }假设因为它有效,所以没关系太多.

然后我遇到了一个问题 - 我需要在Book类中创建一个包含它的Book对象.不会输入任何其他数据.基本上如下:ID

public boolean hasBook(int i) {
    Book b = new Book(i); …
Run Code Online (Sandbox Code Playgroud)

java overriding equals

150
推荐指数
4
解决办法
25万
查看次数

Java ArrayList包含始终返回false,尽管它包含相同的值

这是我的孔类

class Hole {

public  int a;
public  int b;

Hole(int a, int b) {
    this.a = a;
    this.b = b;
}
Run Code Online (Sandbox Code Playgroud)

所以我添加了一个包含几个洞的ArrayList

public void checkPathLoop(int x, int y) {
        //rough code

        ArrayList<Hole> leftFlowInnerHole = new ArrayList<>();


        //left holes rules
        leftFlowInnerHole.add(new Hole(0, 1));
        leftFlowInnerHole.add(new Hole(1, 5));
        leftFlowInnerHole.add(new Hole(5, 4));
        leftFlowInnerHole.add(new Hole(0, 4));
Run Code Online (Sandbox Code Playgroud)

当我添加

Hole userInputHole = new Hole(0,1);
System.out.print(leftFlowInnerHole.contain(userInputHole));
Run Code Online (Sandbox Code Playgroud)

它总是返回假!! 它假设返回true.

有什么我想念的吗?

先感谢您

java arraylist contain

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×2

arraylist ×1

contain ×1

equals ×1

overriding ×1