0
public class Binary {

    private int _DecNum;
    private String _BinNum;

    public Binary(int n) {
    _DecNum = n;
    _BinNum = ConvToBinR(n);
    }

    public static String ConvToBin(int n) {
    String a = "";
    while(n > 1) {
        a = (n % 2) + a;
        n = n /2;
    }
    return n + a;
    }

    public String toString() {
    return _BinNum;
    }

    public boolean equals(Object a) {
    return this == a || (a instanceof Binary && this._BinNum == ((Binary) a)._BinNum);
    }

    public static void main(String[] args ) {
    int a = Integer.parseInt(args[0]);
    int b = Integer.parseInt(args[1]);
    Binary Zero = new Binary(a);
    Binary One = new Binary(b);
    System.out.println("Base 10: " + a + " in Base 2: " + Zero);
    System.out.println(Zero.equals(One));
    }
}

嗨,大家好!由于某种我无法弄清楚的原因,我的 equals 函数不起作用。this._BinNum == ((二进制) a)._BinNum; 即使我将 a 和 b 的值设置为相等,也会给我一个错误的陈述。任何人都可以帮忙吗?谢谢!

4

6 回答 6

4

就像您使用equals方法来比较您的实例一样,您也应该使用equals方法来比较字符串:-

this._BinNum.equals(((Binary) a)._BinNum)

另外,我不明白您为什么要this == a在方法中进行比较equals。这将始终返回 false,除非您在传递的同一实例上调用 equals 方法。所以你不需要那个。只需使用这个: -

public boolean equals(Object a) {
    return (a instanceof Binary && this._BinNum.equals(((Binary) a)._BinNum));
}

您似乎正在尝试将您的Decimal价值转换为Binary String. 你已经在Integer课堂上有了一个方法。使用Integer#toBinaryStringorInteger#toStringradix: -

Integer.toBinaryString(5);
Integer.toString(5, 2);

这当然是供您将来参考,因为它可以手动进行以用于学习目的。


作为旁注,您应该在代码中遵循Java 命名约定,以便将来其他用户可以轻松阅读。

  • 变量和方法名称应以小写字母、美元或下划线开头。
于 2012-11-22T05:59:55.167 回答
4

_BinNum 是一个字符串,所以使用

this._BinNum.equals(((Binary) a)._BinNum)
于 2012-11-22T06:00:42.320 回答
2

您应该使用equals()方法来进行 String 而不是==运算符的camparision。==比较对象引用而不是对象内容

于 2012-11-22T05:59:57.057 回答
2

这是两个不同的对象,它们的引用不同且不相等。

使用String'equals()方法。

于 2012-11-22T06:00:30.017 回答
1

运算符“==”将根据对象的哈希码查看对象是否相等。但是,它不会在对象中寻找值。

而 equals() 方法将检查对象中的值。所以,尝试使用 stringA.equals(stringB)

于 2012-11-22T06:28:29.217 回答
1

您应该尝试stringA.equals(stringB)为此使用函数

于 2012-11-22T06:00:15.817 回答