2010-07-06 11 views
5

मैं एक सरल तुलना यहाँ कोशिश कर रहा हूँ, काम से काम नहीं करता के रूप में मैं चाहते हैं ... यहाँ कोड है,सी # Noob: इंट काम से काम नहीं कर के रूप में उम्मीद

int returnDateIndex(Paragraph para) 
{ 
    long firstIndex = 0; 
    for (int i = 0; i < para.Words.Count; i++) 
    { 
     if (para.Words[i].Text == "Second") 
     { 
      if (para.Words[i - 1].Text == "First") 
      {       
       firstIndex = para.Words[i].FirstSymbolPosition; 
      } 
     } 
    }  
    return (int)firstIndex; 
} 

मैं भाग गया मेरा डीबगर (वीएस में) और जब उस असाइनमेंट को बुलाया जाता है, तो दाईं ओर int 50 के बराबर था, लेकिन बाईं ओर int 0 के बराबर रहता था। मुझे नहीं पता कि मैं क्या खो रहा हूं।

यह आवेदन ABBYY FineReader 9.0 एसडीके और प्रलेखन FirstSymbolPosition का कहना है के लिए यह रिटर्न, रीड-ओनली लांग

संपादित उपयोग कर रहा है: कोड सभी सुविधाओं से वंचित कर दिया गया है यह आसान दर्शकों को देखने के लिए बनाने के लिए जहां समस्या यह है। मैं मूल प्रश्नों के उत्तर और कोड के साथ कुछ भी जवाब की सराहना करता हूं जो आपको टिप्पणी के रूप में बगैर कर रहा है।

+0

और जब आप मूल्यों की जांच करते हैं तो आप कहां तोड़ते हैं? पर्याप्त निष्पक्ष - – asgerhallas

उत्तर

3

एक स्पष्ट त्रुटि है कि आप पहले मामले वापस जाने के लिए उम्मीद कर रहे हैं वह जगह है जहाँ अपनी शर्तों मैच (इसलिए पहले सूचकांक चर नाम) है, लेकिन क्या तुम सच में पिछले बिंदु है जहां लौट रहे हैं वे मैच। यह भी बुरा है क्योंकि इसका मतलब है कि आप अपना मैच ढूंढने की देखभाल करते रहेंगे। दूसरा यह है कि यदि वाक्य में पहला शब्द "दूसरा" है, तो आप एक नकारात्मक सूचकांक को संदर्भित करने का प्रयास करेंगे, जो बहुत खराब है। इसके बजाय इसे आजमाएं:

int returnDateIndex(Paragraph para) 
{ 
    for (int i = 1; i < para.Words.Count; i++) 
    { 
     if (para.Words[i - 1].Text == "First" && para.Words[i].Text == "Second")       
      return (int)para.Words[i].FirstSymbolPosition; 
    } 
    return 0; // this is what your original code would have returned in a "not found" scenario 
} 

यह कोड दोनों त्रुटियों को ठीक करता है, और आपकी असाइनमेंट समस्या को पूरी तरह से साइड-चरण भी करता है।

+0

धन्यवाद धन्यवाद कर रहे हैं इस समस्या अभी भी बरकरार के साथ सिर्फ barebones कोड है,, लेकिन यह केवल वास्तव में एक बार होता है =) वर नाम समस्या सूट करने के लिए बदल दिया गया है, खेद है कि आपको भ्रमित करने के लिए। –

+0

मैं इस –

+0

कोशिश करेंगे यह –

1

एक तरफ के रूप में आपको firstIndex के असाइनमेंट के बाद break जोड़ना चाहिए अन्यथा यदि लूप में शर्तों को पूरा किया जाता है तो अन्यथा यह किसी अन्य मूल्य से अधिलेखित हो सकता है।

if (para.Words[i - 1].Text == "First") 

वहाँ वहाँ में कोई चेक है यकीन है कि मैं से अधिक या 1 के बराबर है, अगर मैं 0 के बराबर है तो आप हो जाएगा बनाने के लिए:

+0

सुझाव के लिए धन्यवाद ... इस कोड को पोस्ट यहाँ हालांकि –

+0

@Josh के लिए minimalized किया गया है। – ChrisF

+1

नहीं कुछ अतिरिक्त शर्त का उल्लेख है ताकि यदि "दूसरा" पैरा का पहला शब्द है, यह एक 'ArrayIndexOutOfBoundsException' फेंक नहीं होंगे। –

1

क्या ChrisF कहा के अलावा, यह बहुत खतरनाक है सरणी से बाहर अनुक्रमण।

+0

हाँ फिर से वहाँ जगह में अन्य चेकों हालांकि –

0

एफवाईआई: .NET में तुलना हमेशा आपकी अपेक्षा के अनुसार व्यवहार नहीं करती है। प्राथमिक प्रकार की तुलना जटिल प्रकारों से अलग है। यदि आप पूर्णांक की तुलना करते हैं तो आपको उनकी सामग्री की तुलना मिलती है। यदि आप वस्तुओं की तुलना करते हैं तो आप ऑब्जेक्ट के पते की तुलना कर रहे हैं, यह सामग्री नहीं है।

+0

अपने प्रश्न के साथ क्या करना है? –

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