2015-03-06 8 views
6

की सीमा के साथ स्विच बयान मैं संख्या की श्रेणी जाँच करने के लिए एक स्विच बयान का उपयोग करने के लिए मैं की तरह case 1...5 या case (score >= 120) && (score <=125) काम करेगा लेकिन मैं तो बस किसी भी तरह हो रही त्रुटियों पर रखने कुछ कहने कुछ स्थानों पर पाया है चाहता हूँ।जावा - पूर्णांक

मुझे क्या चाहिए यदि यह संख्या 1600-169 9 के बीच है तो कुछ करें।

मैं बयान के दौरान कर सकता हूं लेकिन अनुमान लगाया गया है कि यदि संभव हो तो स्विच का उपयोग शुरू करने का समय लगता है।

+2

एक 'अगर' के लिए कई बार कर रहे हैं, और वहाँ एक 'परिवर्तन के लिए समय है '। * यह * एक 'अगर' के लिए एक समय है। –

उत्तर

5

जहाँ तक मुझे पता है, जावा में स्विच मामलों के लिए श्रेणियां संभव नहीं हैं। आप

switch (num) { 
    case 1: case 2: case 3: 
    //stuff 
    break; 
    case 4: case 5: case 6: 
    //more stuff 
    break; 
    default: 
} 

पर कुछ ऐसा कर सकते हैं लेकिन उस बिंदु पर, यदि आप कथन के साथ भी चिपक सकते हैं।

2

आप त्रिगुट ऑपरेटर का उपयोग कर सकते हैं, ? :

int num = (score >= 120) && (score <=125) ? 1 : -1; 
num = (score >= 1600) && (score <=1699) ? 2 : num; 
switch (num) { 
    case 1 : 
     break; 
    case 2 : 
     break; 
    default : 
     //for -1 
} 
9

JVM स्तर switch बयान पर बयान करता है, तो से मौलिक रूप से अलग है।

स्विच के बारे में समय स्थिरांक है कि सभी संकलन समय पर निर्दिष्ट करने संकलन है, ताकि javac संकलक कुशल बाईटकोड पैदा करता है।

जावा में switch कथन श्रेणियों का समर्थन नहीं करता है। आपको सभी मान निर्दिष्ट करना होगा (आप मामलों के माध्यम से गिरने का लाभ ले सकते हैं) और default मामले। किसी और चीज को if कथनों द्वारा संभाला जाना है। ताकि आप enums पर स्विच कर सकते हैं

1

आप वास्तव में-यहां बयान स्विच का उपयोग करना चाहते हैं, enum रों साथ छद्म पर्वतमाला बनाने के लिए एक तरीका है।

सबसे पहले, हम पर्वतमाला बनाने की आवश्यकता होगी:

public enum Range { 

    TWO_HUNDRED(200, 299), 
    SIXTEEN_HUNDRED(1600, 1699), 
    OTHER(0, -1); // This range can never exist, but it is necessary 
        // in order to prevent a NullPointerException from 
        // being thrown while we switch 

    private final int minValue; 
    private final int maxValue; 

    private Range(int min, int max) { 
     this.minValue = min; 
     this.maxValue = max; 
    } 

    public static Range getFrom(int score) { 
     return Arrays.asList(Range.values()).stream() 
      .filter(t -> (score >= t.minValue && score <= t.maxValue)) 
      .findAny() 
      .orElse(OTHER); 
    } 
} 

और फिर अपने स्विच:

int num = 1630; 
switch (Range.getFrom(num)) { 

    case TWO_HUNDRED: 
     // Do something 
     break; 

    case SIXTEEN_HUNDRED: 
     // Do another thing 
     break; 

    case OTHER: 
    default: 
     // Do a whole different thing 
     break; 
} 
संबंधित मुद्दे