2015-06-21 13 views
5

मैं एक शून्य विधि बनाने की कोशिश कर रहा हूं जो औसत की गणना करता है, लेकिन मैं मुख्य विधि से विधि को मान पास करना चाहता हूं। यहाँ मैं क्या करना है कोशिश कर रहा हूँ का एक उदाहरण है:विधियों को ऑब्जेक्ट मानों को पास करने के लिए

public class Plant { 

    int leaves; 
    int age; 
    int sumLeaves; 
    double average; 

    void averageLeaves() { 

     sumLeaves = leaves + leaves; //here is where I need help 
     average = (double) sumLeaves/2; 
     System.out.println("The average number of leaves is: " + average); 

    } 

    public static void main(String[] args) { 

     Plant plantA = new Plant(); 
     plantA.leaves = 5; 

     Plant plantB = new Plant(); 
     plantB.leaves = 3; 

     averageLeaves(); 

    } 

समस्या मैं विधि में कई पौधों के मूल्यों हो रही है हो रही है। मैंने .get, लूप, static, और कई अन्य चीजों का उपयोग करने का प्रयास किया है और अभी तक इसे समझ नहीं लिया है। मैं जो चाहता हूं वह plantA.leaves और plantB.leaves के मूल्य को उनके योग को खोजने के लिए विधि के लिए है।

उत्तर

4

चूंकि आपके पास प्लांट क्लास में averageLeaves() परिभाषित है, इसलिए आपको वास्तव में पौधे के उदाहरण में से मेथोड का आह्वान करना होगा। यहां बताया गया है कि आपको यह कैसे करना चाहिए।

plantA.averageLeaves(); 

एक बड़ी गलती तुम यहाँ कर रहे हैं,

sumLeaves = leaves + leaves;   

यह वास्तव में एक विशिष्ट (एक) पौधों की उदाहरण के पत्ते कहते हैं, यह गलत है। आपको वास्तव में अंतर उदाहरणों से पत्तियों की संख्या पारित करनी होगी।

गेटर्स & सेटर्स का उपयोग करके इसे करने का एक अच्छा तरीका है। इसके अलावा averageLeaves() विधि स्थिर बनाने के लिए यह बहुत समझदारी होगी। इस तरह आपको विधि का आह्वान करने के लिए एक उदाहरण की आवश्यकता नहीं है।

public class Plant { 

    int leaves; 
    int age; 
    //int sumLeaves; you do not need them now, as the averageLeaves method is static 
    //double average; 

    static void averageLeaves (int leaves1, int leaves2) { 

     int sumLeaves = leaves2 + leaves1;    //here is where I need help 
     double average = (double) sumLeaves/2; 
     System.out.println("The average number of leaves is: " + average); 
    } 

    void setLeaves(int leaves){ 
     this.leaves = leaves; 
    } 

    int getLeaves(){ 
     return this.leaves; 
    } 
} 

    public class Main { 

    public static void main(String[] args) { 

     Plant plantA = new Plant(); 
     plantA.setLeaves(5); 

     Plant plantB = new Plant(); 
     plantB.setLeaves(3); 

     Plant.averageLeaves(plantA.getLeaves(), plantB.getLeaves()); 
    } 
} 
+1

बेशक, क्या यह सिस्टैक्टिक रूप से 'औसत लेव' 'स्थिर 'होने का सबसे अधिक अर्थ नहीं उठाएगा? –

+0

हां, मैं भी यही सोच रहा था। हो सकता है कि मुझे जवाब में जोड़ना चाहिए। – Fawzan

+0

यह ओपी को भ्रमित कर सकता है (लेकिन शायद वह कुछ सीखेंगे ...) –

0

आप इस तरह यह करना होगा:

public class Plant 
{ 
    int age; 
    int sumLeaves; 
    double average; 

    void averageLeaves (int leaves) 
    { 
     sumLeaves = leaves + leaves;    //here is where I need help 
     average = (double) sumLeaves/2; 
     System.out.println("The average number of leaves is: " + average); 
    } 
} 

public class Example 
{ 
     public static void main(String[] args) 
     { 
      Plant plantA = new Plant(); 
      plantA.leaves = 5; 

      Plant plantB = new Plant(); 
      plantB.leaves = 3; 

      plantA.averageLeaves(plantA.leaves); 
      plantB.averageLeaves(plantB.leaves); 
     } 
} 

देखो तुम ही चर है कि आप विधि में (कोष्ठक के अंदर) इनपुट करना चाहते हैं और आपके पास जब आप अपने विधि का उपयोग घोषित करने के लिए है कि विधि में घोषणा के क्रम में विधि का उपयोग करने के लिए () मानों को पारित करने के लिए।

मुझे उम्मीद है कि यह आपके लिए सहायक होगा!

+0

मुझे लगता है कि आप एक ऑब्जेक्ट संदर्भ के बिना एक गैर स्थैतिक विधि को कॉल करना मुश्किल होगा ... –

+0

@BenKnoble आपका क्या मतलब है? –

+0

'औसत लेव्स' वर्ग 'प्लांट' का एक उदाहरण विधि है, इसलिए 'प्लांट' का एक उदाहरण इसे आमंत्रित करने की आवश्यकता है। आपके 'मुख्य' में आपके पास ऑब्जेक्ट के किसी ऑब्जेक्ट के उदाहरण के बिना विधि को कॉल किया गया है। या तो विधि को स्थैतिक बनाएं, या 'plantA' या' plantB' इसे कॉल करें। –

0

यह थोड़ा अस्पष्ट है कि आपका क्या मतलब है। पौधे का औसत क्या है? दो पौधों का औसत। मैं उत्तरार्द्ध मान रहा हूँ। फिर ऐसा करने का एक तरीका यह है कि विधि को एक स्थिर सदस्य के रूप में आमंत्रित करें और पत्तियों में तर्क के रूप में पास करें।

public class Plant { 

    int leaves; 

    static void averageLeaves (int leaves1, int leaves2) { 
     int sumLeaves = leaves1 + leaves2; //here is where I need help 
     double average = (double) sumLeaves/2; 
     System.out.println("The average number of leaves is: " + average); 
    } 

    public static void main(String[] args) { 

     Plant plantA = new Plant(); 
     plantA.leaves = 5; 

     Plant plantB = new Plant(); 
     plantB.leaves = 3; 

     Plant.averageLeaves(plantA.leaves, plantB.leaves); 

} 
0

यहां एक साधारण संस्करण है जो आपको पौधों की एक चर संख्या में गुजरने और उनके औसत की गणना करने की अनुमति देता है।

public class Plant { 
    private int leaves; 

    public Plant(int leaves) { 
     this.leaves = leaves; 
    } 

    public int getLeaves() { 
     return this.leaves; 
    } 

    public static void main(String[] args) { 
     PrintLeavesAverage(
      new Plant(5), 
      new Plant(10), 
      new Plant(15), 
      new Plant(12) 
     ); 
    } 

    private static void PrintLeavesAverage(Plant... plants) { 
     int totalLeaves = 0; 
     for (Plant p : plants) { 
      totalLeaves += p.getLeaves(); 
     } 
     double average = (double)totalLeaves/plants.length; 
     System.out.println("The average number of leaves is: " + average); 
    } 
} 

... या आप थोड़ा अधिक सजावटी मिलता है, और नए जावा 8 सुविधाओं में से कुछ बाहर की कोशिश करने के लिए, अगर आप इस तरह औसत की गणना करने के लिए उपयोग कर सकते हैं धाराओं चाहते करना चाहते हैं:

private static void PrintLeavesAverage(Plant... plants) { 
    OptionalDouble average = Arrays.stream(plants).mapToInt(p -> p.leaves).average(); 

    if (average.isPresent()) { 
     System.out.println("The average number of leaves is: " + average.getAsDouble()); 
    } else { 
     System.out.println("No plants, no average"); 
    } 
} 
संबंधित मुद्दे