2015-12-08 7 views
5

मेरे पास नीचे जावा कोड है।ऐरे इंडेक्स प्रिंटिंग गलत मान

import java.util.Arrays; 

public class Cook { 
    public static void main(String[] args) { 
     int num[] = { 3, 1, 5, 2, 4 }; 
     getMaxValue(num); 
    } 

    public static void getMaxValue(int[] num) { 
     int maxValue = num[0]; 
     int getMaxIndex = 0; 
     for (int i = 1; i < num.length; i++) { 
      if (num[i] > maxValue) { 
       maxValue = num[i]; 
      } 
     } 
     getMaxIndex = Arrays.asList(num).indexOf(maxValue); 
     System.out.println(getMaxIndex + " and " +maxValue); 
    } 
} 

उपरोक्त कोड में मैं सरणी में अधिकतम मूल्य है और यह भी अपने सूचकांक प्राप्त करने का प्रयास कर रहा हूँ, लेकिन यहाँ उत्पादन है कि मैं हो रही है

-1 and 5 

अधिकतम मान दिया जाता है ठीक है, लेकिन यह सुनिश्चित नहीं है कि इंडेक्स में क्या गलत है। यह वास्तव में 2 प्रिंट करना चाहिए, लेकिन यह -1 प्रिंट कर रहा है, कृपया मुझे बताएं कि मैं कहां गलत हूं और मैं इसे कैसे ठीक कर सकता हूं।

Thankd

+2

क्या आपको वास्तव में Arrays की आवश्यकता है ... अनुक्रमणिका इस कोड स्निपेट में? –

+0

यदि आपने थोड़ा डिबगिंग करने का समय लिया है, और निरीक्षण किया है कि आपके द्वारा उपयोग किए जाने वाले पूरे 2 (!) फ़ंक्शंस में से प्रत्येक एक क्या करता है, तो आप जान लेंगे। – njzk2

उत्तर

21

आप पाश में अधिकतम सूचकांक अद्यतन करना चाहिए:

int maxValue = num[0]; 
    int getMaxIndex = 0; 
    for (int i = 1; i < num.length; i++) { 
     if (num[i] > maxValue) { 
      maxValue = num[i]; 
      getMaxIndex = i; 
     } 
    } 

कारण Arrays.asList(num).indexOf(maxValue); रिटर्न -1 कि पुरातन की एक सरणी एक भी तत्व का एक List (करने के लिए Arrays.asList द्वारा परिवर्तित किया जाता है है सरणी स्वयं), और List में maxValue नहीं है (इसमें केवल मूल सरणी है)।

6

जबकि पुनरावृत्ति अनुक्रमणिका को अपडेट करने की जरूरत है, getMaxIndex = i;

public static void getMaxValue(int[] num) { 
     int maxValue = num[0]; 
     int getMaxIndex = 0; 
     for (int i = 1; i < num.length; i++) { 
      if (num[i] > maxValue) { 
       maxValue = num[i]; 
       getMaxIndex = i; 
      } 
     } 
     System.out.println(getMaxIndex + " and " + maxValue); 
    } 

उत्पादन

2 and 5 

नीचे कुछ @Eran की चर्चा करते हुए किया जाता है।

इसे Listsize 1 में परिवर्तित किया गया है, जिसमें एक तत्व (सरणी स्वयं) है।

प्रति जावाडोक के रूप में, indexOf

में इस सूची निर्दिष्ट तत्व की पहली घटना के सूचकांक रिटर्न, या -1 इस सूची तत्व शामिल नहीं है यदि।

तो यह maxValueinside List और not inside array stored in 0th index of List की खोज करता है।

enter image description here

1
जवाब ऊपर

सही हैं लेकिन आप यह भी

import java.util.Arrays; 

public class Cook { 

    public static void main(String[] args) { 
     Integer num[] = { 3, 1, 5, 2, 4 }; 
     getMaxValue(num); 
    } 

    public static void getMaxValue(Integer[] num) { 
     int maxValue = Arrays.asList(num).get(0); 
     int getMaxIndex = 0; 
     for (int i = 1; i < num.length; i++) { 
      if (Arrays.asList(num).get(i) > maxValue) { 
       maxValue = Arrays.asList(num).get(i); 
      } 
     } 
     getMaxIndex = Arrays.asList(num).indexOf(maxValue); 
     System.out.println(getMaxIndex + " and " +maxValue); 
    } 
} 
+0

'Arrays.asList' के साथ ये सभी परिवर्तन क्यों? यदि आप 'इंटीजर []' का उपयोग कर रहे हैं, तो बस करें: 'सूची एल = Arrays.asList (num); int अधिकतम = संग्रह। मैक्स (एल); int indexMax = l.indexOf (अधिकतम); '। 3 लाइनें ... –

4

हर कोई अच्छा संकेत देता है क्या कर सकते हैं, लेकिन कोई भी विस्तार से बताता है कि क्यों यह काम नहीं करता।

Arrays.asList() हस्ताक्षर public static <T> List<T> asList(T... a) के साथ परिभाषित किया गया है जो वस्तुओं की एक परिवर्तनीय संख्या या वस्तुओं की एक सरणी लेता है।

हालांकि, int एक आदिम प्रकार है और ऑब्जेक्ट प्रकार नहीं है। तो Arrays.asList(num) को "इस सरणी को लेने" के रूप में व्याख्या नहीं किया गया है, लेकिन "इस ऑब्जेक्ट को एक ऑब्जेक्ट के रूप में लें"। परिणाम इस प्रकार List<int[]> है, जहां दिए गए नंबर (बेशक) नहीं मिल सकते हैं।

तो अधिकतम खोज के दौरान इंडेक्स रखना बेहतर है, क्योंकि अन्य उत्तरों पहले से ही सुझाव देते हैं।

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