2013-03-14 7 views
8
private String getWhoozitYs(){ 
    StringBuffer sb = new StringBuffer(); 
    boolean stop = generator.nextBoolean(); 
    if(stop = true) 
    { 
     sb.append("y"); 
     getWhoozitYs(); 
    } 
    return sb.toString(); 
} 

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

+0

अरे मुझे लगता है कि आप इसे एक समझ सकते हैं, यह एक अच्छी पहेली है .. कास्टिंग देखो। esp। 0 और 1 – Coffee

+1

इसके अलावा, आप बस 'अगर (रोकें)' यह देख सकते हैं - http://stackoverflow.com/questions/3793650/convert-boolean-to-int-in-java – Coffee

उत्तर

19

if(stop = true)if(stop == true) होना चाहिए, या बस (बेहतर!) if(stop) होना चाहिए।

यह वास्तव में क्यों हमेशा if(something) उपयोग करें यदि आप देखना चाहते हैं यह true बजाय if(something == true) लिखने की है करने के लिए एक कारण को देखने के लिए एक अच्छा अवसर है (बुरा शैली!)।

stop = true कर कर तो आप truestop पर और तुलना नहीं कर रहे हैं।

तो if कथन के नीचे कोड क्यों निष्पादित किया गया?

देखें JLS - 15.26. Assignment Operators:

रन समय, काम अभिव्यक्ति का परिणाम चर के बाद काम आ गई है का मूल्य है। असाइनमेंट अभिव्यक्ति का परिणाम स्वयं एक चर नहीं है।

तो क्योंकि आप stop = true लिखा था, तो आप if हालत संतोषजनक रहे हैं।

//... 
if(stop) // Or to: if (stop == true) 
{ 
    sb.append("y"); 
    getWhoozitYs(); 
} 
return sb.toString(); 
//... 
+4

वास्तव में, यह केवल ' अगर (रोकें) '। यह टाइपो के कारण गलत व्याख्या के लिए भी खुला नहीं है। : पी – cHao

+0

यदि अभी भी तुलना कर रहा है, तो यह ठीक है क्योंकि स्टॉप सत्य पर सेट हो जाता है, यह हमेशा सत्य का मूल्यांकन करेगा। खेद है कि यह एक नाइटपिक है लेकिन यह कुछ मूल्यवान समझा जाता है (क्योंकि ओपी एक शुरुआत करने वाला है)। –

+0

एक संदेह ... 'अगर (रोकें) 'और' अगर (रोक == सत्य)' दूसरे को निष्पादन के लिए अतिरिक्त सीपीयू चक्र की आवश्यकता है। प्रोग्रामिक रूप से दोनों दुभाषिया समान हैं, तो इसका उपयोग करना बुरा क्यों है? – kAmol

1

stop जब से तुम को उस हिस्से को बदल सकते हैं बूलियन है।

if (stop == true)

प्रयास करें इसके अलावा Top Ten Errors Java Programmers Make को एक बार देख ले।

4

समस्या यहाँ

है अगर (stop = true) एक नियुक्ति नहीं तुलना यहां है:

1
if(stop == true) 

या

if(stop) 

= कार्य के लिए है।

== स्थिति की जांच के लिए है।

if(stop = true) 

यह (सत्य) को रोकने और मूल्यांकन करने के लिए सही असाइन करेगा। इसलिए यह हमेशा कोड को निष्पादित करेगा अगर रोकें हमेशा सत्य के साथ असाइन की जाएंगी।

1

इस प्रयास करें: -

private String getWhoozitYs(){ 
    StringBuffer sb = new StringBuffer(); 
    boolean stop = generator.nextBoolean(); 
    if(stop) 
    { 
     sb.append("y"); 
     getWhoozitYs(); 
    } 
    return sb.toString(); 
} 
1

= असाइनमेंट के लिए है

लिखने

if(stop){ 
    //your code 
} 

या

if(stop == true){ 
    //your code 
} 
1

अतिरिक्त तुम सिर्फ

लिख सकते हैं
if(stop) 
{ 
     sb.append("y"); 
     getWhoozitYs(); 
} 
3

वास्तव में, पूरे दृष्टिकोण क्लीनर हो सकता है अगर आप केवल बजाय हर पुनरावर्ती कॉल में एक बनाने के बजाय, StringBuffer का एक उदाहरण का इस्तेमाल किया था ... मैं जाना होगा के लिए:

private String getWhoozitYs(){ 
    StringBuffer sb = new StringBuffer(); 
    while (generator.nextBoolean()) { 
     sb.append("y"); 
    } 

    return sb.toString(); 
} 
संबंधित मुद्दे