2015-04-22 4 views
-1

Im пытается вручную проверить мой enum Вращающийся метод next(), но он ничего мне не возвращает, скорее всего, null. Когда я назначаю некоторый переменный тестер = Rotation.CW0, а затем вызывается метод next(), метод должен возвращать CW90, но ничего не возвращает. COuld, пожалуйста, посмотрите, что я сделал неправильно в коде?Пытается проверить метод Enum

public class Tester { 

    public static void main(String[] args) 
    { 
     Rotation tester = Rotation.CW0; 
     tester.next(); 
    } 
} 
public enum Rotation { 

    CW0, CW90, CW180, CW270; 

    // Calling rot.next() will return the next enumeration element 
    // representing the next 90 degree clock-wise rotation after rot. 
    public Rotation next() 
    { 
     if(this == CW0) 
      return CW90; 
     else if(this == CW90) 
      return CW180; 
     else if(this == CW180) 
      return CW270; 
     else if(this == CW270) 
      return CW0; 

     return null; 
    } 
+5

Вы не назначить результат 'next()' переменной, поэтому вы просто бросаете его в основном. –

+1

Попробуйте распечатать результат: 'System.out.println (tester.next());' –

+1

Используйте 'switch'. Пожалуйста. И зачем использовать 'enum' для этого, когда математика будет казаться намного проще - у вас есть направление, с которым вы сталкиваетесь, и вы добавляете некоторое количество градусов; то вы можете проверить, в каком квадранте вы находитесь. –

ответ

3
public class Tester { 

    public static void main(String[] args) { 
     Rotation tester = Rotation.CW0; 
     System.out.println(tester.next()); 
    } 
} 

public enum Rotation { 

    CW0, CW90, CW180, CW270; 

    public Rotation next() { 
     switch (this) { 
     case CW0: 
      return CW90; 
     case CW90: 
      return CW180; 
     case CW180: 
      return CW270; 
     case CW270: 
      return CW0; 
     } 
     return null; 
    } 
} 
+0

@Pshemo yep! просто попробовал и исправил ответ: –

+1

Вам понадобится 'default' на этом' switch'. И ваши имена ошибочны. –

+0

первая была хорошая попытка;) ..... изменить 'next' для' this' –

1

Присвоить результат следующего() обратно к тестеру:

public static void main(String[] args) throws Exception { 
    Rotation tester = Rotation.CW0; 
    tester = tester.next(); 
    System.out.println(tester); 
} 

public enum Rotation { 

    CW0, CW90, CW180, CW270; 

    // Calling rot.next() will return the next enumeration element 
    // representing the next 90 degree clock-wise rotation after rot. 
    public Rotation next() { 
     if (this == CW0) { 
      return CW90; 
     } else if (this == CW90) { 
      return CW180; 
     } else if (this == CW180) { 
      return CW270; 
     } else if (this == CW270) { 
      return CW0; 
     } 

     return null; 
    } 
} 
+2

вы просто печатаете «» .. я думаю, вы хотели напечатать тестер: System.out.println (tester) –

+0

Да ... У меня было это, потому что я просто отлаживал, поэтому я может посмотреть тестер в моей среде IDE после того, как следующий() был вызовом. Хороший улов, хотя! – Shar1er80

3

Как насчет:

enum Rotation { 

    CW0, CW90, CW180, CW270; 

    //here we know that that all enum variables are already created 
    //so we can now set them up 
    static{ 
     CW0.next = CW90; 
     CW90.next = CW180; 
     CW180.next = CW270; 
     CW270.next = CW0; 
    } 

    private Rotation next; 

    public Rotation next() { 
     return this.next; 
    } 
} 

ИЛИ немного более загадочными

enum Rotation { 

    CW0, CW90, CW180, CW270; 

    //to prevent recreating array of values in each `next()` call 
    private static final Rotation[] values = values(); 
    private static final int LENGTH = values.length; 

    public Rotation next() { 
     return values[(this.ordinal() + 1) % LENGTH]; 
    } 
} 

но никогда возвращения мне ничего,

хорошо tester.next(); код возвращает вам что-то, но вы не хранить и использовать его в любом месте, поэтому, возможно, изменить свой код на что-то вроде

Rotation tester = Rotation.CW0; 
System.out.println(tester.next()); 
+0

Неправильно иметь такое поле в этом поле в виде перечисления (и я не вижу очевидного способа сделать его окончательным). –

+0

Мне не нравятся изменяемые переменные на 'enum'. Это экономит несколько строк кода за счет того, что ваш 'enum' изменен. –

+0

Ну, я попытался свести к минимуму изменчивость, сделав 'next' частным, который в безотходной среде должен работать нормально. Но чтобы сделать его более безопасным, я добавил вторую версию. – Pshemo