2012-04-02 11 views
24

मैंने एक पूर्णांक सूची बनाई है और एक विशिष्ट मान की अनुक्रमणिका को वापस करने की कोशिश कर रहा हूं। सरणी 3,8,2,5,1,4,7,6 है और मैं इंडेक्सऑफ (3) वापस करना चाहता हूं, जो 0इंडेक्सऑफ ऑब्जेक्ट को ढूंढने में विफल क्यों है?

मैंने ग्रहण जावा स्क्रैपबुक में निम्नलिखित की कोशिश की है । java.util आयात करने के बाद *:

int[] A = {3,8,2,5,1,4,7,9}; 
Arrays.asList(A).indexOf(3) 

मैं भी कोशिश की है:

int[] A = {3,8,2,5,1,4,7,6}; 
ArrayList<Integer> l = new ArrayList(Arrays.asList(A)); 
l.indexOf(3) 

दोनों -1 लौट रहे हैं। क्यूं कर? उम्मीद के अनुसार काम करने के लिए इसे कैसे प्राप्त करें?

+0

सभी के उत्तरों के लिए धन्यवाद। उस परिवर्तन के साथ हालांकि मुझे अपनी डेटा संरचना बदलनी पड़ेगी, इसलिए इसके बजाय मैं बाइनरीशर्च विधि का उपयोग करूंगा क्योंकि यह int [] arrays पर काम करेगा। – rishimaharaj

+2

बस चेतावनी दीजिये कि यह केवल _sorted_ 'int []' arrays पर काम करेगा, जो आपके द्वारा वर्णित उदाहरण नहीं हैं। –

+0

@LouisWasserman मुझे आपकी टिप्पणी और उपरोक्त प्राप्त नहीं मिला है। 'indexOf' "इस सूची में निर्दिष्ट तत्व की पहली घटना की अनुक्रमणिका देता है, या -1 यदि इस सूची में तत्व नहीं है।" - तो यह मनमानी सरणी के लिए क्यों काम नहीं करेगा? – arekolek

उत्तर

20

इसे काम करने के लिए यह इंटीजर [] int int [] होना चाहिए।

Integer[] A = {3,8,2,5,1,4,7,9}; 
final int i = Arrays.asList(A).indexOf(3); 
System.out.println("i = " + i); // prints '0' 
30

Arrays.asList(A)List<int[]> देता है। ऐसा इसलिए है क्योंकि यह वस्तुओं की एक सरणी की अपेक्षा करता है, न कि प्राचीन प्रकार। आपके विकल्प शामिल हैं:

  • उपयोग Integer[] के बजाय int[]
  • इनलाइन सरणी, और यह की देखभाल autoboxing करते हैं; Arrays.asList(3,8,2,5,1,4,7,9) ठीक काम करेगा
  • Guava'sInts.asList(int...)List<Integer> के रूप में आदिम सरणी को देखने के लिए विधि का उपयोग करें। (प्रकटीकरण: मैं अमरूद में योगदान देता हूं।)
  • अमरूद के Ints.indexOf(int[], int) का उपयोग करें, जो सीधे आदिम सरणी पर काम करता है।
1

इसे इस तरह

Integer[] array = {3,8,2,5,1,4,7,9}; 
List<Integer> list = Arrays.asList(array); 

System.out.println(list.indexOf(8)); 

asList रिटर्न static <T> List<T> कहाँ टी आदिम नहीं किया जा सकता (int []) करो।