2015-11-27 136 views
-6

我目前正在編寫一個代碼,我在下面使用枚舉。枚舉不初始化正確的值

public enum ConditionCode { 
    EQ, SEQ, NE, SNE, CS, SCS, HS, SHS, CC, SCC, LO, SLO, MI, SMI, PL, SPL, VS, SVS, VC, 
    SVC, HI, SHI, LS, SLS,GE, SGE, LT, SLT, GT, SGT, LE, SLE, SAL, AL 
} 

我想枚舉ConditionCode.ALS,並打印出來,並通過做比較,AL這個

public static void main(String[] args) { 
    ConditionCode sal = ConditionCode.SAL; 
    System.out.print(sal.toString + " "); 
    System.out.println(sal.compareTo(ConditionCode.AL) == 0); 
} 

我感到奇怪的是,這個命令打印AL,而不是SAL false,它同樣爲所有其他枚舉例如

public static void main(String[] args) { 
    ConditionCode cc = ConditionCode.CC; 
    System.out.print(cc.toString + " "); 
    System.out.println(cc.compareTo(ConditionCode.AL) == 0); 
} 

還將打印AL而不是CC false。我能知道它爲什麼這樣做嗎?而且,我該如何解決它?

+5

您的代碼無法編譯。它會失敗'sal.toString'(parens失蹤)。 – fge

+0

它會因爲它會使用java.Lang.Enum.toString(),如果你必須改變枚舉的輸出,例如,如果你想讓你所有的類的枚舉打印'S',你必須覆蓋函數toString類似於'public String toString(){return'S'; }'否則默認的toString就是'public String toString(){return super.toString(); }' –

回答

2

這個程序http://ideone.com/uXiIj8打印效果與預期

public static void main (String[] args) throws java.lang.Exception 
{ 
    { 
     ConditionCode sal = ConditionCode.SAL; 
     System.out.print(sal + " "); 
     System.out.println(sal.compareTo(ConditionCode.AL) == 0); 
    } 
    { 
     ConditionCode sal = ConditionCode.CC; 
     System.out.print(sal + " "); 
     System.out.println(sal.compareTo(ConditionCode.AL) == 0); 
    } 
} 

public enum ConditionCode { 
    EQ, SEQ, NE, SNE, CS, SCS, HS, SHS, CC, SCC, LO, SLO, MI, SMI, PL, SPL, VS, SVS, VC, 
    SVC, HI, SHI, LS, SLS,GE, SGE, LT, SLT, GT, SGT, LE, SLE, SAL, AL 
} 

打印

SAL false 
CC false 

我可以知道爲什麼它這樣做?而且,我該如何解決它?

您很可能在更改代碼並重新編譯程序之前運行它,或者您正在運行與您認爲自己的程序不同的程序。我會確保你的IDE設置正確,在運行之前重新編譯你的程序,如果顯示正常,可能重新啓動它。

+1

謝謝你的回答,但我發現問題出在我的代碼中,我只是沒有在我的函數中傳遞正確的參數 –