दिलचस्प पोस्ट
डिस्क पर सहेजे बिना अजगर सबप्रोसेसेस के बीच मैं बड़े numpy arrays कैसे पार करूं? कैसे PHP में विभिन्न नई शैली शैलियों को बदलने के लिए सबसे चतुर तरीका है? पूर्णांक बनाम लांग भ्रम कैसे अजगर में एक स्कैटर प्लॉट पर एक लाइन overplot करने के लिए? GET विधि का उपयोग करके फ़ाइल अपलोड करना UITableViewController बिना UIRefreshControl नामांकित पैरामीटर जेडीबीसी टेम्पलेट बनाम जेडीबीसी टेम्पलेट JavaScript में Jday (जूलियन डे) की गणना लंबे स्ट्रिंग से ईमेल पता कैसे प्राप्त करें विशेष वर्णों को छोड़ने के लिए नियमित अभिव्यक्ति NSURLConnection sendAsynchronousRequest के माध्यम से मैं एक अतुल्यकालिक कॉल को कैसे रद्द कर सकता / सकती हूं? सीएसएस बाल बनाम निर्वाचक चयनकर्ता PHP में लिखा कोई सभ्य PHP पार्सर? एक्शनबार पर एक प्रगति रखें "एक संभावित खतरनाक अनुरोध प्राप्त करना। क्लाइंट (&) से पाथ मान पाया गया था"

सरणी के arrays.asList ()

इस रूपांतरण में क्या गलत है?

public int getTheNumber(int[] factors) { ArrayList<Integer> f = new ArrayList(Arrays.asList(factors)); Collections.sort(f); return f.get(0)*f.get(f.size()-1); } 

मैंने इसे सरणी से अर्रे लिस्ट में मिला समाधान को पढ़ने के बाद बनाया है। getTheNumber(...) में दूसरी पंक्ति (छँटाई) निम्नलिखित अपवाद का कारण बनता है:

धागा "मुख्य" java.lang.ClassCastException में अपवाद: [मुझे java.lang.Comparable में डाली नहीं जा सकता]

यहाँ क्या गलत है? मुझे एहसास है कि क्रमबद्धता Arrays.sort() साथ किया जा सकता है, मैं इस एक के बारे में बस उत्सुक हूँ।

Solutions Collecting From Web of "सरणी के arrays.asList ()"

चलो निम्नलिखित सरल उदाहरण पर विचार करें:

 public class Example { public static void main(String[] args) { int[] factors = {1, 2, 3}; ArrayList<Integer> f = new ArrayList(Arrays.asList(factors)); System.out.println(f); } } 

Println लाइन में यह "[[I 190d11]" जैसे कुछ छापती है जिसका अर्थ है कि आपने वास्तव में एक ArrayList का निर्माण किया है जिसमें एंट एरेज़ शामिल है

आपका आईडीई और कंपाइलर को उस कोड में अनचेक किए गए असाइनमेंट के बारे में चेतावनी देना चाहिए। आपको new ArrayList<Integer>() new ArrayList<>() बजाय हमेशा new ArrayList<Integer>() या new ArrayList<>() उपयोग करना चाहिए। यदि आपने इसे इस्तेमाल किया था, तो कंसोल त्रुटि के कारण निर्माता को List<int[]> पास करने की कोशिश करनी होगी।

int[] से Integer[] तक कोई ऑटोबॉक्सिंग नहीं है, और वैसे भी ऑटोबॉक्सिंग केवल कम्पाइलर में वाक्यविन्यास चीनी है, इसलिए इस मामले में आपको मैन्युअल रूप से सरणी प्रतिलिपि करने की आवश्यकता है:

 public static int getTheNumber(int[] factors) { List<Integer> f = new ArrayList<Integer>(); for (int factor : factors) { f.add(factor); // after autoboxing the same as: f.add(Integer.valueOf(factor)); } Collections.sort(f); return f.get(0) * f.get(f.size() - 1); } 

आप पूर्णांक [] को पूर्णांक [] करने का प्रयास कर रहे हैं, यह संभव नहीं है।

आप सरणी से सूची प्राप्त करने से पहले इंटर्ज को कनवर्ज़ करने के लिए कॉमन्स-लैंग के अर्रेयूटील्स का उपयोग कर सकते हैं:

 public int getTheNumber(int[] factors) { Integer[] integers = ArrayUtils.toObject(factors); ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(integers)); Collections.sort(f); return f.get(0)*f.get(f.size()-1); } 

इस अपवाद के दो कारण हैं:

1

Arrays.asList(factors) एक List<int[]> जहां factors एक पूर्णांक सरणी है

2

आप टाइप पैरामीटर को इसमें शामिल करना भूल गए:

 ArrayList<Integer> f = new ArrayList(Arrays.asList(factors)); 

साथ में:

 ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(factors)); 

जिसके परिणामस्वरूप एक संकलन-समय त्रुटि उत्पन्न होती है:

 पाया: java.util.List <int []>
 आवश्यक: java.util.List <java.lang.Integer>

Java.utils.Arrays का उपयोग करें:

 public int getTheNumber(int[] factors) { int[] f = (int[])factors.clone(); Arrays.sort(f); return f[0]*f[(f.length-1]; } 

या यदि आप कुशल होना चाहते हैं तो सभी ऑब्जेक्ट आवंटन से बचें, वास्तव में काम करें:

 public static int getTheNumber(int[] array) { if (array.length == 0) throw new IllegalArgumentException(); int min = array[0]; int max = array[0]; for (int i = 1; i< array.length;++i) { int v = array[i]; if (v < min) { min = v; } else if (v > max) { max = v; } } return min * max; } 

मुझे लगता है कि आपको ऐसे उदाहरण मिले हैं जहां ऑटो बॉक्सिंग वास्तव में काम नहीं करता है। क्योंकि Arrays.asList(T... a) पास एक varargs पैरामीटर है, जो कंपाइलर जाहिरा तौर पर int [] को मानता है और एक List<int[]> इसमें एक तत्व के साथ देता है

आपको इसे विधि में बदलना चाहिए:

 public int getTheNumber(Integer[] factors) { ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(factors)); Collections.sort(f); return f.get(0) * f.get(f.size() - 1); } 

और संभवतः संगतता के लिए इसे जोड़ते हैं

 public int getTheNumber(int[] factors) { Integer[] factorsInteger = new Integer[factors.length]; for(int ii=0; ii<factors.length; ++ii) { factorsInteger[ii] = factors[ii]; } return getTheNumber(factorsInteger); } 

Arrays.asList(factors) एक List<int[]> , एक List<Integer> । चूंकि आप new ArrayList<Integer> की बजाय new ArrayList कर रहे हैं, आप इसके लिए एक संकलन त्रुटि नहीं प्राप्त करते हैं, लेकिन एक ArrayList<Object> बनाएं जिसमें एक int[] और फिर आप ArrayList<Integer> को ArrayList<Integer> । बेशक पहली बार जब आप उन "Integers" में से एक का उपयोग करने की कोशिश करते हैं तो आपको अपवाद मिलता है

जावा 5 से 7 में यह काम करता है:

 public int getTheNumber(Integer... factors) { ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(factors)); Collections.sort(f); return f.get(0)*f.get(f.size()-1); } 

जावा 4 में कोई vararg नहीं है … 🙂

यह जावा एपीआई से "सॉर्ट है

सार्वजनिक स्थिर शून्य सॉर्ट (सूची सूची) निर्दिष्ट तत्वों को आरोही क्रम में क्रमबद्ध करता है, इसके तत्वों के प्राकृतिक आदेश के अनुसार। सूची में सभी तत्वों को तुलनात्मक अंतरफलक लागू करना होगा। इसके अलावा, सूची में मौजूद सभी तत्वों को पारस्परिक रूप से तुलनीय होना चाहिए (जो कि, e1.compartoTo (e2) को सूची में किसी भी तत्व ई 1 और ई 2 के लिए क्लाससेलस्ट एक्सपैशन नहीं डालनी चाहिए।)

यह तुलनात्मक अंतरफलक को लागू करने के साथ क्या करना है

जहाँ तक मैं इसे समझता हूं, संग्रह वर्ग में सॉर्ट फंक्शन केवल तुलनीय इंटरफ़ेस को लागू करने वाले संकलन को सॉर्ट करने के लिए इस्तेमाल किया जा सकता है।

आप इसे पूर्णांक की एक सरणी प्रदान कर रहे हैं आप संभवत: इस बारे में एक पता लपेटर कक्षाओं जैसे पूर्णांक के रूप में लपेट लेना चाहिए। पूर्णांक तुलनीय कार्यान्वित करता है

जब से मैंने कुछ गंभीर जावा पर काम किया है, तब से यह बहुत समय हो गया है, हालांकि सॉर्ट फ़ंक्शन पर कोई बात पढ़ना इससे आपकी सहायता करेगा।