java - Why do I suddenly need to declare a variable as "final" when adding an ActionListener to a button? -


संभव डुप्लिकेट:

यह मेरे लिए एक "यादृच्छिक गणित खेल" के लिए कोड है I वर्ग के लिए बना रहा हूँ:

  पैकेज RandomMathGame; आयात करें java.awt.event.ActionEvent; आयात करें java.awt.event.ActionListener; आयात javax.swing। *; सार्वजनिक श्रेणी के रैंडममथगेम {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {RandomProblem Generator randomProblems = new RandomProblem Generator (10); अंतिम इंट नंबर समस्याएं = 10; Int correctScore = 0; जेपीनल पैनल = नया जेपीनल (); पूर्णांक उत्तर; Int सही जवाब; जेएलैबेल [] माथप्राब्लेम्स = नया जेएलैबेल [नंबर समस्याएं]; अंतिम जेटेक्स्टफिल्ड [] गणितक्षेत्र = नया JTextField [संख्याएँ]; जेएलैबल [] सहीहाँ नो = नया जेएलैबेल [संख्याएं]; अंतिम जेएलैब स्कोर = नया जेएलैबेल (सहीसकोर + "/ 10"); जेबटन सबमिट = नया जेबटन ("सबमिट"); के लिए (int i = 1; i & lt; = संख्या समस्याएं; i ++) {अंतिम int x = randomProblems.createNumberX (); अंतिम इंट वाई = यादृच्छिक पब। गणित समस्याएं [i] = नया जेएलैबेल ("+ + + +" * "+ Y +" = "); गणित अभिविन्यास [i] = नया JTextField (); जवाब = Integer.parseInt (mathAnswers [i] .getText ()); सही जवाब = एक्स * वाई; अगर (उत्तर == सही जवाब) {सही हाँ नहीं [i] = नया जेएलैबेल ("सही उत्तर; अच्छा काम!"); CorrectScore = correctScore + 1; } और {सही हां नहीं [i] = नया जेएलैबेल ("गलत जवाब, पुनः प्रयास करें!"); } पैनल.एड (गणित समस्याएं [आई]); panel.add (mathAnswers [i]); panel.add (correctYesNo [i]); } Submit.addActionListener (नया एक्शनलिस्टर () {@ ओवरराइड पब्लिक व्होइड एक्शन प्रफोर्मेड (एक्शन इवेंट ई) {स्कोर। सेट टेक्स्ट ("स्कोर:" + सहीसकोर + "/ 10");}}); panel.add (प्रस्तुत); panel.add (स्कोर); जेफ्राम गेमफ़्रेम = नया जेफ्राम (); GameFrame.setTitle ("रैंडम मठ गेम"); GameFrame.setSize (150, 150); gameFrame.setVisible (सही); gameFrame.setContentPane (पैनल); }}   

मुझे एक त्रुटि मिल रही है कि ActionListener द्वारा उपयोग किए जाने से पहले correctScore चर को अंतिम रूप में घोषित किया जाना चाहिए लेकिन जब मैं सही सत्र को अंतिम रूप में सेट करता हूं, तो यह सभी प्रकार की अन्य त्रुटियों का कारण बनता है। किसी को भी इसे सुलझाने का एक तरीका लगता है?

एक अनाम चर के लिए स्थानीय चर को पास करने के लिए, यह अंतिम होना चाहिए - यह जावा भाषा का हिस्सा है अब जब एक आदिम चर अंतिम होता है, तो आप इसे संशोधित नहीं कर सकते हैं, इसलिए आपको correctScore अंतिम बनाते समय मिलती है।

एक कार्यवाही एक अस्थायी चर का उपयोग करने से पहले addActionListener कॉल करें:

  अंतिम पूर्णांक temp = correctScore;   

और अपने क्रियापरिवर्तित विधि में temp वेरिएबल का उपयोग करें।

ध्यान दें कि जब आप ऐसा करते हैं, तो कोई भी सही करने के लिए भविष्य में बदलता है, स्कोप के मूल्य में नहीं दिखाई देगी।

Comments