2012-11-22 34 views
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)); 
    } 
} 

嗨,大家好!由于某些原因,我的等价函数不起作用,我无法弄清楚。 this._BinNum ==((Binary)a)._ BinNum;即使我将a和b的值设置为相等,也会给我一个错误的陈述。谁能帮忙?谢谢!Java平等不起作用?

+3

http://stackoverflow.com/questions/767372/java-string-equals-versus – Alex

+3

4个答案和1个评论在这个问题在空气中的19秒内。 – Isaac

回答

4

就像你正在使用equals方法来比较你的情况,你也应该使用equals方法比较字符串: -

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

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

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

看来你正在尝试将Decimal值转换为Binary String。你已经有了一个Integer类的方法。使用Integer#toBinaryStringInteger#toStringradix: -

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

这当然是为你将来的参考,因为其确定为学习目的,做手工。


作为一个侧面说明,你应该遵循Java Naming Conventions在你的代码,所以它是在未来的其他用户轻松读取。

  • 变量和方法名称应以小写字母,美元或下划线开头。
2

您应该使用equals()方法来创建字符串而不是==运算符。 ==比较对象引用,而不是对象的内容

1

你应该尝试使用stringA.equals(stringB)功能此

2

这是两个不同的对象,它们的引用是不同的,而不是平等的。使用Stringequals()方法。

4

_BinNum是String所以使用

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

运算符“==”将寻找的对象是否相等或不基于对象的哈希码。但是,它并没有寻找对象中的价值。

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