2012-05-14 19 views
8

में लूपिंग के बिना जांचने का कोई आसान तरीका है कि जावा में बाइट सरणी में सभी 0xFF मान के रूप में हैं या नहीं?जांचें कि बाइट सरणी 0xff

उदाहरण

byte[] b = new byte[]{ 0xff, 0xff, 0xff, 0xff, 0xff }; 

if (b is all 'ff') 
    process? 
+3

, मुझे नहीं लगता कि यह संभव है (इच्छासूची की तरह +1 के लिए +1)। लूपिंग के बिना –

+0

?? नहीं!! – WickeD

+0

@JacoVanNiekerk: बिना लूपिंग के सी में आप इसे कैसे करेंगे? एकमात्र तरीका जिसे मैं सोच सकता हूं उसे 'बी' को निश्चित आकार और "छोटा" होना आवश्यक होगा। –

उत्तर

3

आप पाशन पसंद नहीं है, उपयोग प्रत्यावर्तन :)

public static void test1() { 
    class Chk { 
     boolean c(int [] b, int val, int pos) { 
      if (pos >= b.length) { 
       return true; 
      } 
      if (b[pos] != val) { 
       return false; 
      } 
      return c(b, val, pos + 1); 
     } 
    } 
    Chk test = new Chk(); 

    System.out.println(test.c(new int [] {0xff, 0xff}, 0xff, 0)); 

    System.out.println(test.c(new int [] {0xff, 0xff, 0xff, 0xfe}, 0xff, 0)); 

    System.out.println(test.c(new int [] {0x01, 0x01, 0x01, 0x01}, 0xff, 0)); 

    System.out.println(test.c(new int [] {0x01, 0x01, 0x01, 0x01}, 0x01, 0)); 
} 
+0

लेकिन रिकर्सन छिपाने में बस लूपिंग है! (जैसे लूपिंग छिपाने में बस रिकर्सन है!) –

+0

यह इस बात पर निर्भर करता है कि आप लूपिंग को कैसे परिभाषित करते हैं :) – DRCB

4

छोरों (या तो स्पष्ट या पुनरावर्ती) के बिना किसी भी भाषा में ऐसा करने के लिए कोई तरीका नहीं है। यहां तक ​​कि यदि आपके सीपीयू के पास पैटर्न के लिए मेमोरी एरिया की जांच करने के लिए एक विशेष निर्देश है, तो यह आंतरिक रूप से लूप होगा। तो आपका प्रश्न वास्तव में समझ में नहीं आता है।

  • , अपने सरणियों हमेशा एक ही लंबाई है, तो आप सेटअप एक निरंतर कर सकते हैं और Arrays.equals() का उपयोग करें:

    आप ऐसा करने के लिए एक कुशल तरीके के लिए पूछ रही है, तो कई तरीके हैं। यदि आपके पास कई अलग-अलग लंबाई हैं लेकिन केवल कुछ ही अलग-अलग हैं, तो आप कई स्थिरांक बना सकते हैं।

  • आप सरणी को सॉर्ट कर सकते हैं और पहले और अंतिम मान की जांच कर सकते हैं। यदि वे समान हैं, तो सभी मानों के बीच -1 होना चाहिए।

  • आप चेक को एक विधि में स्थानांतरित कर सकते हैं, जिसका अर्थ है कि "चेक लूप" कोड को किसी महत्वपूर्ण स्थान पर अव्यवस्थित नहीं करता है।

  • आप जेएनआई का उपयोग असेंबलर कोड तक पहुंचने के लिए कर सकते हैं जो बदले में विशेष निर्देशों का उपयोग करता है।

  • अन्य भाषाएं इस तरह की चीजों के लिए बेहतर समर्थन प्रदान करती हैं। ग्रूवी में, आप b.size() == b.count { it == -1 }

1

पागल विचार कर सकते हैं, आप मिलान तार के साथ यह कर सकते हैं

int[] b = new int[]{0xff, 0xff, 0xff, 0xff, 0xff}; 
String arr = Arrays.toString(b).replaceAll(", ", ""); 
String match = "\\[("+new Integer(0xff).toString()+")+\\]"; 
System.out.println(arr); 
System.out.println(match); 
System.out.print(arr.matches(match)); 
सी आप coul ... ओह .. हाँ, यह जावा है :) दुर्भाग्य में अच्छी
संबंधित मुद्दे