2017-05-28 5 views
5

मेरे पास एनम "वीकडेज़" लिखने का असाइनमेंट है जो स्थिरांक एक से अधिक पैरामीटर के साथ हैं।

क्या एनम प्रकार के पास उनके मूल्य (1,2,3,4,5,6,7 - मेरे कोड से) के मूल्यों को फिर से शुरू करने का एक छोटा तरीका है या मुझे एक और डेटा प्रकार लिखना है जहां स्टोर करना है अनुरोधित डेटा?
मेरी कोड है कि:अपने int मूल्य से एक enum पर फिर से कैसे करें?

public enum Weekdays { 
    MON("Monday", "Mon",1), 
    TUE("Tuesday","Tue",2), 
    WED("Wednesday","Wed",3), 
    THU("Thursday","Thu",4), 
    FRI("Friday", "Fri",5), 
    SAT("Saturday","Sat",6), 
    SUN("Sunday","Sun",7); 

    private String fullName; 
    private String shortName; 
    private int number; 

    Weekdays(String fullName, String shortName, int number) { 
     this.fullName = fullName; 
     this.shortName = shortName; 
     this.number = number; 
    } 

    public String getFullName() { 
     return fullName; 
    } 

    public String getShortName() { 
     return shortName; 
    } 

    public int getNumber() { 
     return number; 
    } 
} 

समस्या कोड एक मूल्य है जो उपयोगकर्ता द्वारा निर्धारित है से अधिक पुनरावृति करने के लिए किया है, तो मैं बस अंत करने के लिए अपनी शुरुआत से enum से अधिक पुनरावृति नहीं कर सकते।

संपादित करें क्योंकि मुझे लगता है कि मैं इसे अच्छी तरह से व्याख्या नहीं करते:
कोड उपयोगकर्ता द्वारा दर्ज एक पूर्णांक मूल्य से अधिक पुनरावृति करने के लिए और उदाहरण के लिए एक और निरंतर के property- मुद्रित करने के लिए है: जब उपयोगकर्ता की इनपुट 4, कार्यक्रम मुद्रित करना चाहिए:

Thursday, Friday, Saturday, Sunday, Monday, Thuesday, Wednesday 

उत्तर

2

आप values() द्वारा सभी enum मूल्यों को प्राप्त है और उन्हें एक Weekdays::getNumber छानने मानों userInput की तुलना में कम कर रहे हैं करने के लिए नक्शे सकता है:

Arrays.stream(Weekdays.values()) 
     .mapToInt(Weekdays::getNumber) 
     .filter(i -> i > userInput) 
     .forEach(i -> { /**/ }); 

दक्षता के लिए, आप भी मैप की सरणी एक स्थिर क्षेत्र में पकड़ सकता है:

private static int[] numbers = Arrays.stream(Weekdays.values()).mapToInt(Weekdays::getNumber).toArray(); 

और उपयोग जब यह जरूरत है कि:

public void method(int userInput) { 
    // validate userInput 
    for (int i = userInput; i < numbers.length; i++) { 
     // do sth with numbers[i] 
    } 
} 

संपादित करें:
मैं यहाँ टिप्पणी में अपनी आवश्यकताओं को पकड़ा, समाधान है जैसा कि मैंने इसे देखा:

public void method(int userInput) { 
    // validate userInput 
    Weekdays[] values = Weekdays.values(); 

    for (int i = userInput; i < values.length + userInput; ++i) { 
     Weekdays day = values[i % values.length]; 
     System.out.println(day.getFullName()); 
    } 
} 
+0

आपको बहुत धन्यवाद, वास्तव में मदद करता है! –

संबंधित मुद्दे