2013-08-15 12 views
7

Chcę zdefiniować ciąg i liczbę całkowitą razem, ale daje błędy.Wyliczanie Java, integer i string razem definiują?

Błąd jest błędem składni na tokenie 9, usuń token.

+0

nie sądzę, można umieścić całkowitą jako wartość enum –

+0

A liczba całkowita nie jest poprawną nazwą zmiennej w Javie! –

Odpowiedz

3

Nie można rozpocząć wyliczania za pomocą numeru. Spróbuj użyć NINE.

8

W zadeklarowaniu wyliczenia w Javie { Ace, 9, Queen, King } nie są to ciągi i liczby całkowite. Są to rzeczywiste obiekty wyliczenia.

Można to zrobić:

public enum Rank { 
    Ace(13), 
    Nine(8), 
    //etc 
    ; 

    private int rank; 

    Rank(int rank) { 
     this.rank = rank; 
    } 

    public int getRank() { 
     return rank; 
    } 
} 
+0

'enum Rank {Ace, 9, Queen, King};' daje błąd w następujący sposób 'Błąd składni na tokenie" 9 ", Oczekiwano identyfikatora' .... nie rozumiem dlaczego? –

+0

@AudeagSamaiya Ponieważ 9 nie jest prawidłową nazwą zmiennej. Nie możesz nazwać swoich zmiennych 9, stałe enum również zachowują się jak zmienna. Mogą nawet być zmiennymi. – Haggra

2

Java zasady nazewnictwa powiedzieć nie można uruchomić zmienne, nazwy klas itd ... z numerami.

1

spróbować

public enum Rank { Ace, Jack, Queen, King }//and other suits 

zamiast swojego wyliczenia

problemem jest to, że jeśli można podwyższyć liczbę jako wartość enum następnie kompilator nie będzie wiedział, kiedy ktoś napisać „9” to miał na myśli numer lub wyliczenie. więc java, jak prawie każdy język, nie pozwoli na tego rodzaju wartość wyliczeniową

+0

@DuncanJones skopiuj wklej z kodu, który działał, który działał nieprawidłowo. poprawione i dodane informacje –

+0

@DuncanJones, wiem. dziękuję Btw, zawsze staram się zostawić co najmniej dobrą dobrą odpowiedź –

6

Rzeczy wewnątrz enum s są identyfikatory, nazwy statycznej końcowej (stała) obiektów, które będą tworzone. Tak więc nie można użyć int do nazywania obiektu.

enum s pozwalają na umieszczenie pola dla każdej pozycji:

public static enum Suit {HEART,DIAMOND,SPADE,CLUB} 

public static enum Cards { 
    ACE_OF_HEART(Suit.HEART,14), QUEEN_OF_SPADE(Suit.SPADE,13) /* etc etc*/; 

    private final Suit mSuit; 
    private final int mRank; 

    private Cards(Suit suit, int rank) { 
     assert rank >= 2 && rank <= 14; 
     mSuit = suit; 
     mRank = rank; 
    } 

    public Suit getSuit() { 
     return mSuit; 
    } 

    public int getRank() { 
     return mRank; 
    } 
} 

Ty naprawdę nie chcesz kodować wszystkie 52 kart w ten sposób. Można modelować to w inny sposób:

Suite:

public static enum Suit { SPADE, HEART, DIAMOND, CLUB}; 

klasy z niektórych popularnych szeregach jako nazwanych stałych:

public class Card{ 

    public static final int ACE = 14; 
    public static final int QUEEN = 13; 
    public static final int KING = 12; 
    public static final int JACK = 11; 

    private final int mRank; 
    private final Suite mSuit; 

    public Card(Suite s, int r){ 
    this.mSuit = s; 

    if(r < 2 || r > 14){ 
     throw new IllegalArgumentException("No such card with rank: "+r); 
    }  

    this.mRank = r; 
    } 

    public Suit getSuit() { 
     return mSuit; 
    } 

    public int getRank() { 
     return mRank; 
    } 
} 
Powiązane problemy