java - Non-static variable/method cannot be refrenced from static context! What is the prob? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 13 जवाब
  आयात करें java util.Scanner; आयात करें java.lang.Math; सार्वजनिक वर्ग असाइनमेंट 1 {// आवृत्ति चर डबल ए; डबल ख; डबल सी; // विधि सार्वजनिक डबल हाइपोट (डबल एक्स, डबल y) {x = x * x; Y = y * y; डबल z = x + y; Z = Math.sqrt (z); वापसी z; } // कंस्ट्रक्टर सार्वजनिक असाइनमेंट 1 (डबल ए, डबल बी, डबल सी) {this.a = a; This.b = b; This.c = c; } सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] args) {// निष्पादन यहाँ से शुरू होता है असाइनमेंट 1 obj = नया असाइनमेंट 1 (ए, बी, सी); स्कैनर = नए स्कैनर (System.in); System.out.println ("पायथागोरस प्रमेय की गणना करने के लिए मान दर्ज करें"); Obj.a = in.nextDouble (); Obj.b = in.nextDouble (); Obj.c = हाइपोट (ए, बी); System.out.println ("हाइपोट है" + c); }}  

इस कोड के साथ समस्या क्या है ... मैं वस्तुओं का निर्माण कर रहा हूँ ... तो यह ठीक worl चाहिए !! आपके मुख्य विधि में (जो

> स्थिर ) आप a b और c फ़ील्ड तक पहुँचने का प्रयास कर रहे हैं जो कि के संदर्भ के बिना गैर-स्थिर हैं असाइनमेंट 1 उदाहरण

आपको यह समझने की आवश्यकता है कि वर्ग के गैर-स्थिर सदस्य वर्ग के उदाहरण के अंतर्गत आते हैं और वे इस तरह के उदाहरण के माध्यम से ही पहुंच सकते हैं।

गैर-स्थिर तरीकों में जैसे

  शून्य से कुछ विधि () {फ़ील्ड = 42; }  

आप केवल उदाहरण के संदर्भ के बिना फ़ील्ड का उपयोग कर सकते हैं क्योंकि कंपाइलर आपके लिए वेरिएबल को this। जोड़ देगा, जो वर्तमान उदाहरण का प्रतिनिधित्व करेगा । स्थिर तरीकों में कोई यह नहीं है, क्योंकि स्थैतिक विधियों / फ़ील्ड पूरे वर्ग से संबंधित हैं, उदाहरण के लिए नहीं।

अपनी समस्या को हल करने के लिए पहले या तो असाइनमेंट 1 वर्ग के "अनसेट" (कह सकते हैं कि आप अपने मान को 0 पर सेट करें) जैसे

  असाइनमेंट 1 ओबज = नया असाइनमेंट 1 (0, 0, 0);  

तब आप अपने फ़ील्ड को उपयोगकर्ता से डेटा में सेट कर सकते हैं जैसे

  obj.a = in.nextDouble (); Obj.b = in.nextDouble ();  

और अंत में आप c का उपयोग करके

  obj.c = obj.hypot (obj.a, obj) की गणना कर सकते हैं। ख);  

ऑब्जेक्ट फ़ील्ड के बीटीडब्ल्यू डायरेक्ट मैनिप्युलेशन खराब डिज़ाइन पर विचार कर रही है। इसके बजाय आपको गेटर्स और सेटर्स (जैसे getA () जैसी विधियों setA (int newA) ) को बनाने चाहिए जो उनके मान वापस करेगा या हेरफेर करेगा।

< / html>

Comments