2016-06-23 12 views
5

के साथ प्रयास-पकड़ का उपयोग करना है तो मैं एक प्रोग्राम बना रहा हूं जो कमांड लाइन से एक इनपुट इनपुट लेता है और फिर int के लिए प्रोग्राम में सरणी की खोज करता है और यदि पाया जाता है, तो संख्या की अनुक्रमणिका लौटाएं। यदि नहीं, तो यह एक अपवाद फेंकता है जिसमें कहा गया है कि यह प्रोग्राम नहीं मिला और समाप्त नहीं हुआ।यदि कोई और लूप

public static void main(String[] args) { 

    int[] intArray = {9, 97, 5, 77, 79, 13, 7, 59, 8, 6, 100, 55, 35, 89, 74, 66, 32, 47, 51, 88, 23}; 
    System.out.println(Arrays.toString(intArray)); 

    int intArgs = Integer.parseInt(args[0]); 

    System.out.println("Your entered: " + intArgs); 

    FindNum(intArray, intArgs); 
} 

public static int FindNum(int[] intArray, int intArgs) { 
    for (int index = 0; index < intArray.length; index++){ 
     try{ 
      if (intArray[index] == (intArgs)) 
       System.out.println("Found It! = " + index); 
      else 
       throw new NoSuchElementException("Element not found in array."); 
     } catch (NoSuchElementException ex){ 
      System.out.println(ex.getMessage()); 
     } 
    } 
    return -1;  
} 

जबकि काम करता है इस तरह की और सूचकांक पा सकते हैं, यह सिर्फ पूरे सरणी के लिए एक के बजाय सरणी में प्रत्येक संख्या के लिए अपवाद फेंकता है: यह क्या मैं अब तक है। और यदि यह सरणी में संख्या पाता है, तो यह लूप से पुष्टिकरण रेखा के साथ लाइनों में से एक को प्रतिस्थापित करता है। 66 के लिए उदाहरण आउटपुट:

[9, 97, 5, 77, 79, 13, 7, 59, 8, 6, 100, 55, 35, 89, 74, 66, 32, 47, 51, 88, 23] 
Your entered: 66 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Found It! = 15 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 

मैं इसे कैसे इतना है कि जब यह संख्या पाता है, यह केवल सूचकांक लाइन और अपवाद के लिए उतना ही प्रिंट कर सकते हैं। मुझे लगता है कि यह लूप के साथ कुछ करने के लिए हो सकता है लेकिन यह सुनिश्चित नहीं है कि मैं इसे रोकने के लिए क्या कर सकता हूं।

+1

लूप के अंदर try-block डालने के बजाए लूप को try-block के अंदर रखें। या बेहतर अभी तक, एक कोशिश-ब्लॉक क्यों है? बस खोज करें, और यदि नहीं मिला तो त्रुटि संदेश मुद्रित करें। – FredK

+1

लूप के बाहर अपना प्रयास-पकड़ रखें, इसके अंदर नहीं। – ManoDestra

+0

आप सरणी में किसी तत्व के साथ मान को जांचने के लिए हर बार अपवाद फेंक रहे हैं और एक मेल नहीं मिला है, जो गलत साइन है, आप सभी तत्वों का दौरा करने के बाद ही तत्व को सरणी में निष्कर्ष निकाल सकते हैं। –

उत्तर

4

आप नीचे दिए गए की तरह कोड को फिर से लिखने सकते हैं ..

अपने कोड के अनुसार, आप प्रत्येक तत्व की जाँच कर रहे हैं और मिलान नहीं करता है, तो आप एक अपवाद फेंक रहे हैं।यह सटीक नहीं है, क्योंकि आप निष्कर्ष नहीं निकाल सकते हैं कि तत्व मौजूद नहीं है जब तक कि आप सभी तत्वों को स्कैन न करें। उस स्थिति में आप यह निर्धारित करने के लिए झंडे का उपयोग कर सकते हैं कि आपको कोई मिलान मिल गया है या लूप के बाद आप ध्वज की जांच कर सकते हैं और अपवाद फेंक सकते हैं। दोबारा, यदि आप एक ही विधि के भीतर अपवाद को पकड़ने की योजना बना रहे हैं, तो आपको अपवाद फेंकने की आवश्यकता नहीं हो सकती है। इसके बजाय आप नीचे इंडेक्स या -1 को वापस कर सकते हैं ..

public static int FindNum(int[] intArray, int intArgs) { 
    for (int index = 0; index < intArray.length; index++){ 
     if (intArray[index] == (intArgs)){ 
      System.out.println("Found It! = " + index); 
      return index; 
     } 
    } 
    throw new NoSuchElementException("Element not found in array."); 
} 
+0

हालांकि यह काम करता है, मुझे आवश्यकताओं के अनुसार अपवाद फेंकना होगा। हालांकि मदद के लिए धन्यवाद ... – AvenNova

+0

मैंने जवाब को अपडेट किया है .. मेरे पिछले कोड से, आपको अपवाद फेंकने के लिए केवल 'वापसी -1' को एक कथन में बदलना होगा .. –

+1

यह काम करता है लेकिन यह अभी भी फेंकता है लाल अपवाद पाठ। तो मैंने मुख्य रूप से टेक्स्ट प्रिंट करने के लिए FindNum विधि को कॉल करने के लिए प्रयास करने का प्रयास किया और यह अब काम करता है! सहायता के लिए धनयवाद! – AvenNova

0

अन्य को हटाएं और प्रयास के अंदर कथन फेंक दें। एक परिवर्तनीय बूलियन ध्वज = झूठी शुरू करें। पुनरावृत्ति से पहले। यदि तत्व लूप के अंदर पाया जाता है, तो स्थिति ध्वज = सत्य जोड़ें और फिर लूप से तोड़ें। अब पुनरावृत्ति के अंत के बाद यह लिखें: अगर (! ध्वज) System.out.print ("एलिमेंट नहीं मिला"); मूल रूप से आप तत्व को मुद्रित कर रहे हैं जो हर पुनरावृत्ति पर नहीं मिलता है, सिवाय इसके कि तत्व कहां पाया जाता है जो एक भयानक त्रुटि है।

1
int i = -1; 
... 
    if (intArray[index] == intArgs) i = index; 
... 

कोशिश पाया तत्व के एक सूचकांक रखने के लिए एक int चर बनाने के लिए। यदि कुछ भी नहीं मिला है तो विधि की अंतिम पंक्ति अपवाद फेंकता है।

if (index == -1) throw new NoSuchElementException(...); 

एक और तरीका सीधे सूचकांक लौट रहा है और बिना किसी शर्त के अंत में अपवाद फेंक रहा है।

if (intArray[index] == intArgs) return index; 
... 
throw new NoSuchElementException(...); 

मैं आपको त्रुटि कोड वापस नहीं करने की सलाह देता हूं। जावा के लिए अधिक प्राकृतिक, इस मामले में, एक अनचेक अपवाद फेंक रहा है।

6

int के लिए प्रोग्राम में सरणी की खोज करता है और यदि पाया जाता है, तो संख्या की अनुक्रमणिका लौटाएं। यदि नहीं, तो यह एक अपवाद फेंकता है जिसमें कहा गया है कि यह प्रोग्राम नहीं मिला और समाप्त नहीं हुआ।

जो आपने ध्यान से लिखा है उसे पढ़ें।

यदि नहीं मिला, तो आपको अपवाद फेंकना चाहिए। आप केवल यह जानते हैं कि एक बार जब आप अपने सभी तत्वों से गुज़र चुके हैं तो आपको मूल्य नहीं मिला है। तो आप लूप के अंदर से फेंक नहीं सकते हैं। यदि आपको तत्व नहीं मिला है तो आप केवल लूप के बाद फेंक सकते हैं।

दूसरा, आपको अपवाद फेंकना होगा। आप ऐसा नहीं कर रहे हैं: इसके बजाय, आप जिस अपवाद को फेंक चुके हैं उसे फेंक और पकड़ लें। अपवाद फेंकने का मुद्दा यह है कि विधि के कॉलर को पता चले कि कुछ असाधारण होता है। आपको किसी विधि के अंदर अपवाद फेंकना और पकड़ना नहीं चाहिए।

अंत में, आपकी विधि सूचकांक सूचकांक को मानी जाती है। लेकिन ऐसा नहीं है। यह हमेशा -1 देता है।

+1

धन्यवाद! आपका और रेडफ्लर 3 की सलाह ने एक गुच्छा की मदद की, अंततः इसे मिला! काश मैं एक के बजाय दो उत्तरों का चयन कर सकता हूं: डी – AvenNova

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