2016-01-21 52 views
-1
public int compareTo(Person p) { 
    int res = 1; 
    String personStr = p.getId(); 
    String thisId = this.getId(); 

    if(thisId.equals(personStr)){ 
     res = 0; 
    } 
    else if(thisId.compareTo(personStr)){ 
     res = -1; 
    } 

    return res; 
} 

一個非常簡單的compareTo方法,但我沒有收到錯誤消息。如果statemint中的條件給了我一個消息,說它不能從int轉換爲布爾值。我明白了,但問題是我正在使用netiher。我只想比較兩個簡單的字符串,爲什麼會發生這種情況?Java CompareTo方法狀態我無法將int轉換爲布爾值,即使它們都未被使用

回答

6

你應該注意的是,接口「的compareTo」將返回一個int「公衆詮釋的compareTo」是符號

if語句靠一個布爾值,但是你用thisId.compareTo(personStr),這將返回一個整數,就像你創建的方法一樣。

您的第一條if語句很好 - 'equals'返回一個布爾值。然而,二不,它可能會返回一個-1,0或1。

+0

啊,現在我明白了... * palmslap。過了漫長的一天。我只是設置thisId.compareTo(personStr)== -1){... 它工作正常。 – Baxtex

+0

我們都擁有它們,不要強調。 –

+2

@Baxtex最好使用'thisId.compareTo(personStr)<0' - 理論上說,compareTo可以返回除-1,0或1之外的其他東西 - 比如說-5。 – assylias

2

但事情是,我使用netiher

你能肯定嗎?

這導致int

thisId.compareTo(personStr) 

但是,你正在使用它作爲一個Boolean

if (yourResult) 

if語句需要一個boolean,它不能僅僅是對任何使用值。例如,考慮這之間的區別:和

if (value == 1) 

這樣的:

if (value) 

在一些語言中,你可以得逞的。一些語言爲所有類型分配「真實性」程度,允許您在布爾表達式中使用它們。 Java不是其中之一。你必須在Java中明確定義你的布爾邏輯:

if(thisId.compareTo(personStr) > 0) // or whatever your logic should be 
0

,如果你只是想比較的2串爲什麼不使用

public int compareTo(Person p) { 
    String personStr = p.getId(); 
    String thisId = this.getId(); 
    return thisId.compareTo(personStr); 
}