2011-09-17 19 views
5

हम कैसे अब Java में कई वर्गों का उपयोग करना सीख रहे हैं, और एक परियोजना एक वर्ग Circle जो एक radius और एक diameter शामिल होंगे बनाने के बारे में पूछ रहा है, तो यह संदर्भ व्यास खोजने के लिए एक मुख्य वर्ग से। इस कोड (शीर्षक में उल्लेख किया है) एक त्रुटिजावा त्रुटि - "अवैध विधि घोषणा; वापसी प्रकार आवश्यक"

public class Circle 
{ 
    public CircleR(double r) 
    { 
     radius = r; 
    } 
    public diameter() 
    { 
     double d = radius * 2; 
     return d; 
    } 
} 

किसी भी मदद के लिए धन्यवाद, -AJ

अद्यतन 1 प्राप्त करने के लिए जारी है: ठीक है, लेकिन मैं तीसरी लाइन की घोषणा नहीं करना चाहिए public CircleR(double r) एक डबल के रूप में, है ना? जिस पुस्तक में मैं सीख रहा हूं, उदाहरण में ऐसा नहीं होता है।

public class Circle 

    { 
     //This part is called the constructor and lets us specify the radius of a 
     //particular circle. 
     public Circle(double r) 
     { 
     radius = r; 
     } 

     //This is a method. It performs some action (in this case it calculates the 
     //area of the circle and returns it. 
     public double area() //area method 
     { 
      double a = Math.PI * radius * radius; 
     return a; 
    } 

    public double circumference() //circumference method 
    { 
     double c = 2 * Math.PI * radius; 
    return c; 
    } 

     public double radius; //This is a State Variable…also called Instance 
     //Field and Data Member. It is available to code 
    // in ALL the methods in this class. 
    } 

आप देख सकते हैं, कोड public Circle(double r).... कैसे है कि क्या मैं public CircleR(double r) साथ मेरा में किया था से अलग है? किसी भी कारण से, पुस्तक से कोड में कोई त्रुटि नहीं दी गई है, हालांकि मेरा कहना है कि वहां एक त्रुटि है।

+3

जावैक आमतौर पर काफी उपयोगी होता है और त्रुटि संदेश जो यह लौटाता है वह स्पष्ट है। अगली बार जब इनमें से एक में एक छोटा ब्रेक होगा और जवाब आपके पास आएगा :) – mbatchkarov

+2

'सर्किलआर 'सर्कल' के लिए एक निर्माता नहीं है। नाम * चाहिए * मैच। –

उत्तर

22

आप देख सकते हैं, कोड सार्वजनिक सर्किल (डबल r) .... कैसे है कि क्या मैं सार्वजनिक CircleR (डबल आर) के साथ मेरा में किया था से अलग है? के लिए जो भी कारण है, पुस्तक से कोड में कोई त्रुटि नहीं दी गई है, हालांकि मेरा कहना है कि वहां कोई त्रुटि है।

कक्षा के रचनाकारों को परिभाषित करते समय, उनके पास अपनी कक्षा के समान नाम होना चाहिए। जबकि अपने कोड

public class Circle 
{ 
    private double radius; 
    public CircleR(double r) 
    { 
     radius = r; 
    } 
    public diameter() 
    { 
     double d = radius * 2; 
     return d; 
    } 
} 

गलत है क्योंकि आपके निर्माता अपने वर्ग से अलग नाम है इस प्रकार निम्नलिखित कोड

public class Circle 
{ 
    //This part is called the constructor and lets us specify the radius of a 
    //particular circle. 
    public Circle(double r) 
    { 
    radius = r; 
    } 
.... 
} 

सही है। आप या तो किताब से एक ही कोड का पालन करें और

public CircleR(double r) 

से

public Circle(double r) 

या करने के लिए अपने निर्माता को बदल सकता है CircleR करने के लिए अपने वर्ग का नाम बदलने (तुम सच में CircleR के रूप में अपने निर्माता के नाम करना चाहते थे)।

तो अपने नए वर्ग

public class CircleR 
{ 
    private double radius; 
    public CircleR(double r) 
    { 
     radius = r; 
    } 
    public double diameter() 
    { 
     double d = radius * 2; 
     return d; 
    } 
} 

होना चाहिए मैं भी रूप में अपने विधि में वापसी प्रकार डबल जोड़ा कंस्ट्रक्टर्स के बारे में इस article को Froyo और जॉन बी

देखें द्वारा बताया।

एचटीएच।

+0

ठीक है, लेकिन अब यह त्रिज्या = आर को हाइलाइट कर रहा है; भाग और कह रहा है "प्रतीक नहीं मिल सकता - परिवर्तनीय वर्ग"। और लेख के लिए धन्यवाद, मैं इसे अब पढ़ रहा हूँ। –

+1

कभी भी बुरा नहीं, मुझे एहसास हुआ कि नीचे, मुझे सार्वजनिक डबल त्रिज्या कहना है; इसके लिए क्या कारण है, यद्यपि? मैं सार्वजनिक मंडल (डबल आर) के अंदर दाईं तरफ के बजाय नीचे क्यों कहूं? –

+0

क्योंकि ... 'डबल आर' कन्स्ट्रक्टर के लिए एक पैरामीटर है। 'डबल त्रिज्या;', किसी भी विधि के बाहर, कक्षा में एक क्षेत्र है। जब विधि वापस आती है तो पैरामीटर्स को त्याग दिया जाता है। वर्ग के उदाहरण के रूप में फ़ील्ड मौजूद हैं। –

4

आप एक वापसी प्रकार

public double diameter() 
{ 
    double d = radius * 2; 
    return d; 
} 
8

हर विधि (एक निर्माता के अलावा अन्य) के रूप में दोहरा घोषित करने के लिए एक वापसी प्रकार होना आवश्यक है भूल गया।

public double diameter(){... 
-1

मुख्य विधि में कक्षा जोड़ने के दौरान मुझे एक समान समस्या थी। यह पता चला कि यह कोई मुद्दा नहीं था, यह मेरी वर्तनी की जांच नहीं कर रहा था। तो, एक नोब के रूप में, मैंने सीखा कि गलत वर्तनी कर सकते हैं और गड़बड़ कर सकते हैं। इन पदों ने मुझे मेरी गलती को "देखने" में मदद की और अब सब अच्छा है।

संबंधित मुद्दे