2012-07-17 16 views
9

काम नहीं कर रहा है मैं एक एंड्रॉइड ऐप लिख रहा हूं जो बहुत सी चीजें करता है। मैंने हाल ही में एक बेहतर संरचना के लिए अपने कोड को दोबारा प्रतिक्रिया दी, लेकिन अचानक मुझे बहुत अजीब समस्या हो रही है।आईएफ कथन सिर्फ

handleRequest(String str) 
{ 
    boolean foo = executeCommand(str); 
    this.publishProgress("FOO1: " + foo); 

    if (foo == false); 
    { 
     this.publishProgress("FOO2: " + foo); 
     sendString("Failed to execute: " + str); 
    } 

    this.publishProgress("FOO3: " + foo); 
    sendEOM(); 
} 

कोड के ऊपर एक आदेश पर अमल करना चाहिए, और साथ करता है, तो आदेश सही ढंग से क्रियान्वित किया गया था दुकान 'foo'। यह कोड एंड्रॉइड AsyncTask (थ्रेड) के अंदर है इसलिए मैं टोस्ट दिखाने के लिए 'publprrogress' का उपयोग करता हूं।

मैं डीबगर के माध्यम से फ़्लिप कर रहा हूं और भोजन सच है! टोस्ट्स फू को पूरे तरीके से सच साबित करने के लिए दिखाते हैं। हालांकि, यह आगे बढ़ता है और आईएफ ब्लॉक के अंदर कूदता है और उसे भी निष्पादित करता है। मैंने इसे पहले कभी नहीं देखा है, मुझे लगता है कि यह जावा के साथ एक समस्या है। मैं फ़ंक्शन 'executeCommand' के बावजूद कदम बढ़ा रहा था और ऐसा लगता है कि यह रिटर्न स्टेटमेंट भी छोड़ रहा है।

मैंने वर्चुअल डिवाइस पर कोड चलाया है और एक असली है और वे दोनों ऐसा करते हैं।

कोई विचार? मैं यहाँ पूरी तरह से एक नुकसान में हूँ।

+0

अगर बयान –

+1

नहीं आपकी समस्या के बाद अर्धविराम हटाने की जरूरत है, लेकिन स्वच्छ और साफ 'का उपयोग करता है, तो (! Foo)' बजाय करने के लिए। – dimo414

+0

@ dimo414 ठीक है, मैं इसे पोस्ट करने के समय निराश हो रहा था, इसलिए मैंने इसे "FOO == FALSE" में बदल दिया ताकि यह इतना स्पष्ट हो कि मैं कुछ भी गलत नहीं देख सका। – yellow

उत्तर

22

तुमने कहा

if (foo == false); 

अर्धविराम निकालने के लिए, यह होना चाहिए

if (foo == false) {//your code} 
+2

ओह मैन, मुझे बेवकूफ लगता है। मैं विश्वास नहीं कर सकता कि उसमें अर्धविराम! मैंने समस्या को निष्पादित करने के लिए 'executeCommand' को डिबग करने में बहुत समय बिताया ... वैसे भी, मेरे लिए यह खोजने के लिए धन्यवाद! – yellow

9

अर्धविराम निकालें: if (foo == false); ->if (foo == false)

9

आप if बयान के बाद अर्धविराम डाल दिया।

इस तरह, आपका if कथन वहां पर है, और कोड का निम्न ब्लॉक हमेशा चल रहा है।

इस तरह अपने कोड को संशोधित करें:

handleRequest(String str) { 
    boolean foo = executeCommand(str); 
    this.publishProgress("FOO1: " + foo); 

    if (foo == false) { 
     this.publishProgress("FOO2: " + foo); 
     sendString("Failed to execute: " + str); 
    } 

    this.publishProgress("FOO3: " + foo); 
    sendEOM(); 
} 

N.B.
फ़ंक्शन परिभाषा/लूप की स्थिति के समान ब्लॉक में आपके ब्लॉक-उद्घाटन ब्रेसिज़ को रखते हुए इन प्रकार की गलतियों को बहुत कम बार-बार, आईएमओ बनाता है।

4

कोई ";" नहीं होगा अगर कथन के बाद अर्धविराम।

तो के बजाय अगर (foo == false); यह अगर (foo == false){}

1

मैं नहीं जानता कि कैसे इस लाइन को संकलित करता if (foo == false); होना चाहिए, लेकिन जाहिर है यह करता है। लाइन के अंत में आपको अर्धविराम को हटाने की जरूरत है जैसा कि अन्य ने उल्लेख किया है। उसके साथ ; वहां फ्यू गलत होने पर इसका मतलब कुछ भी नहीं है। फिर कार्यक्रम दो घुंघराले ब्रेसिज़ के बीच अगले ब्लॉक में चला जाता है। इस प्रकार के टाइपो के खिलाफ चेतावनी देने के लिए आपको Findbugs या PMD इंस्टॉल करने की आवश्यकता है।

2

यदि आप अर्धविराम (;) लिखते हैं तो कथन के बाद यह स्थिति समाप्त हो जाती है! आप अगर हालत लेखन के बाद कोड का एक खंड शुरू करने के लिए अर्थात

if(foo == false){ 

// block of Code 

} //end of if condition 
संबंधित मुद्दे