2012-11-22 35 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)