दिलचस्प पोस्ट
क्यों नहीं एक पायथन स्ट्रिंग विधि को कॉल करता है जब तक कि आप अपने आउटपुट को निर्दिष्ट नहीं करते हैं? जावा में प्रॉक्सी के माध्यम से एक HTTPS अनुरोध कैसे भेजें? "एमवीएन तैनात" के बीच स्थानीय रेपो और "एमवीएन इंस्टॉल" में क्या अंतर है? <P: graphicImage> अंदर <ui: repeat> डेटाबेस डेटाबेस छवि प्रदर्शित करें एंड्रॉइड फ़िरिस्टेंस रूम: "इस फील्ड को किसी कर्सर से कैसे पढ़ा जा सकता है" अंतिम डाली गई पंक्ति आईडी प्राप्त करें (एसक्यूएल स्टेटमेंट के साथ) स्काला में करी के दो तरीके; प्रत्येक के लिए उपयोग-केस क्या है? क्या सी # में सभी एरेज़ लागू होते हैं? उपयोगकर्ता नाम के रूप में ईमेल पते की अनुमति देने के लिए Microsoft.AspNet.Identity को कॉन्फ़िगर करें एंड्रॉइड में बिटमैप इमेज का रंग कैसे बदल सकता है? स्ट्रिंग नाम का उपयोग किए बिना संपदा-बदले गए ईवेंट को कैसे बढ़ाएं JQuery के उपयोग से मैं एक तालिका की एक पंक्ति को कैसे देख सकता हूँ (element.scrollintoView)? पायथन में पायथन कोड वाले स्ट्रिंग को मैं कैसे निष्पादित कर सकता हूं? क्या सी # के 'उपज' कीवर्ड के बराबर एक जावा है? क्रोम एक्सटेंशन में jQuery का उपयोग कैसे करें?

वैरिएबल का समाधान नहीं किया जा सकता

मैं एक आइटम सूची बनाने की कोशिश कर रहा हूं, प्रत्येक i और j चर के लिए अलग है मेरा कोड है:

if (i == 0) { if (j == 0) { final CharSequence[] items = {"4:45", "5:00"} } else if (j == 1) { final CharSequence[] items = {"4:43", "4:58"} } else if (j == 2) { final CharSequence[] items = {"4:41", "4:56"} } else { final CharSequence[] items = {"4:38", "4:53"} } 

 new AlertDialog.Builder(this) .setTitle("Hours") .setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { // getStation(i); } }) .show(); } 

मुझे लाइन में एक त्रुटि मिलती है। .setItems(items, ,:

 items cannot be resolved 

मुझे लगता है कि कंपाइलर सोचता है कि CharSequence[] items प्रारंभ नहीं हो सकते हैं या कुछ … मैं इस कार्यक्रम को कैसे चला सकता हूं?

Solutions Collecting From Web of "वैरिएबल का समाधान नहीं किया जा सकता"

समस्या चर scoping है।

 if (someCondition) { final int i = 666; } else { final int i = 42; } int j = i + 1; // compile-time error 

यहां हमारे पास दो लोकल वैरिएबल हैं जो कि वे घोषित और आरम्भ होने के तुरंत बाद गुंजाइश से बाहर निकलते हैं। अगर j के मूल्य की आवश्यकता है, तो i एक बड़े क्षेत्र में घोषित करना होगा।

 final int i; if (someCondition) { i = 666; } else { i = 42; } int j = i + 1; // compiles fine! 

(यह उल्लेख किया जाना चाहिए कि यह वास्तव में परिदृश्यों की तरह है जहां टर्नर ऑपरेटर उत्कृष्टता, यानी)

 final int i = (someCondition) ? 666 : 42; 

आपके विशिष्ट मामले में, दुर्भाग्य से, सरणी प्रारंभिक शॉर्टहैंड केवल घोषणा पर आरंभ करने के लिए उपयोग किया जा सकता है अर्थात्:

 int[] arr1 = { 1, 2, 3 }; // compiles fine! int[] arr2; arr2 = { 4, 5, 6 }; // doesn't compile! 

आप if items बाहर की घोषणा को बाहर खींच सकते हैं और प्रत्येक मामले के लिए वर्बोस कोड लिख सकते हैं (जॉकीम सॉर का जवाब देखें), लेकिन एक अधिक संक्षिप्त कोड सरणी-के- arrays का उपयोग करने के बजाय है

 final CharSequence[][] allItems = { { "4:45", "5:00" }, { "4:43", "4:58" }, { "4:41", "4:56" }, { "4:38", "4:53" } }; final CharSequence[] items = allItems[j]; 

यह तकनीक इस मामले में अच्छी तरह से काम करती है, लेकिन अधिक सामान्य मामले में आप एक Map या कुछ इसी तरह का उपयोग करना चाहते हैं।

नोट: यह मूल कोड में स्पष्ट नहीं है, लेकिन यह काम करता है यदि j या तो 0 , 1 , 2 या 3 यदि आप आखिरी विकल्प को लागू करना चाहते हैं जब j 0 , 1 , 2 अलावा कोई अन्य मूल्य है, तो आपको इसके लिए जांचना होगा और इसे 3 से पहले इस कोड को सेट करना होगा।

आपके पास वास्तव में आपके कोड में 4 items वैरिएबल हैं, प्रत्येक एक बहुत ही सीमित गुंजाइश के साथ (केवल संबंधित के कोड-ब्लॉक)।

इसके बजाय आप एक बड़ा स्कोप के साथ एक वेरिएबल बनाना चाहते हैं:

 if (i == 0) { final CharSequence[] items; if (j == 0) { items = new CharSequence[] {"4:45", "5:00"}; } else if (j == 1) { items = new CharSequence[] {"4:43", "4:58"}; } else if (j == 2) { items = new CharSequence[] {"4:41", "4:56"}; } else { items = new CharSequence[] {"4:38", "4:53"}; } // you can use items here } 

संपादित करें: मैं भूल गया था कि new CharSequence[] यहां जरूरी है। यदि आप घोषणा के दौरान चर को प्रारंभ करते हैं, तो आप इसे छोड़ सकते हैं, लेकिन यहां आपने घोषणा को बाहर कर दिया और एक मान सेट करने के लिए एक साधारण असाइनमेंट का उपयोग किया। किसी कारण के लिए एक सरणी को परिभाषित करने का छोटा सिंटैक्स केवल एक प्रारंभिक वक्तव्य में मान्य है (यानी एक असाइनमेंट में जो घोषणा के रूप में एक ही वक्तव्य में है)।

जावा में आपके पास सख्त ब्लॉक स्तरीय गुंजाइश है, उदाहरण के लिए:

 if (blah) { int foo = 1; } // foo is no longer visible here 

तो एक बार जब आप उस करीबी घुंघराले ब्रेस पर पहुंच जाते हैं) तो आपके आइटम वैरिएबल अब दिखाई नहीं दे रहे हैं। यह जावास्क्रिप्ट से भिन्न है उदाहरण के लिए जहां आपके पास फ़ंक्शन-स्तरीय स्कोप है

उम्मीद है की यह मदद करेगा।

चूंकि आप एक ब्लॉक के भीतर items को परिभाषित (साथ ही एक मूल्य देते हैं), यह केवल उस ब्लॉक के भीतर दिखाई देता है ब्लॉक के बाहर परिभाषा को कहीं न कहीं आप दोनों स्निपेट्स के लिए दिखाई दें, और if else निर्माण के भीतर मूल्य निर्दिष्ट करें

इससे पहले items घोषित करें

 if (i == 0) { 

जिस तरह से आप इसे अब कर रहे हैं, items केवल भीतर के दायरे में ही है if एस।

आप केवल स्थानीय क्षेत्र में आइटम की घोषणा कर रहे हैं आप को स्थानांतरित करने की आवश्यकता है

 final CharSequence[] items 

अगर क्लाजों के बाहर और इसके तहत यदि खंड के अंदर इन्स्तांत होता है