2015-06-21 23 views
5

Tôi đang cố gắng tạo một phương thức void để tính trung bình, nhưng tôi muốn chuyển giá trị cho phương thức từ phương thức chính. Dưới đây là ví dụ về những gì tôi đang cố gắng làm:truyền các giá trị đối tượng cho các phương thức

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(); 

    } 

Vấn đề tôi đang gặp phải là nhận được giá trị của nhiều nhà máy vào phương pháp. Tôi đã thử sử dụng .get, vòng lặp, static và nhiều thứ khác và chưa tìm ra. Những gì tôi muốn là giá trị của plantA.leavesplantB.leaves cho phương pháp để tìm tổng của họ.

Trả lời

4

Vì bạn có averageLeaves() được xác định trong lớp Nhà máy, Bạn phải thực sự gọi methode từ một trong các thể hiện của thực vật. Đây là cách bạn nên làm điều đó.

plantA.averageLeaves(); 

Một sai lầm lớn bạn đang làm ở đây là,

sumLeaves = leaves + leaves;   

thực sự này cho biết thêm những chiếc lá của một cụ thể (một) thể hiện của thực vật, nó là sai. bạn phải thực sự vượt qua số lượng lá từ các trường hợp khác nhau.

Dưới đây là một cách hay hơn để thực hiện việc đó bằng cách sử dụng getters & trình cài đặt. Ngoài ra nó sẽ làm cho nhiều ý nghĩa để làm cho phương pháp tĩnh averageLeaves(). Bằng cách đó bạn không cần một cá thể để gọi phương thức.

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

tất nhiên, nó sẽ không phải là cú pháp có ý nghĩa nhất để có 'averageLeaves' là' tĩnh'? –

+0

Vâng, tôi cũng nghĩ vậy. có lẽ tôi nên thêm nó vào câu trả lời. – Fawzan

+0

Nó có thể gây nhầm lẫn cho OP (nhưng có lẽ anh ta sẽ học điều gì đó ...) –

0

Bạn sẽ phải làm điều đó như thế này:

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); 
     } 
} 

Look rằng bạn chỉ phải khai báo các biến mà bạn muốn nhập vào phương pháp này (trong ngoặc đơn) và khi bạn sử dụng phương pháp của bạn, bạn có để chuyển các giá trị mà phương thức sẽ sử dụng (theo thứ tự khai báo theo phương pháp).

Tôi hy vọng nó sẽ hữu ích cho bạn!

+0

Tôi nghĩ bạn sẽ thấy việc gọi một phương thức không tĩnh mà không cần tham chiếu đối tượng là khó khăn ... –

+0

@BenKnoble Ý của bạn là gì? –

+0

'averageLeaves' là một phương thức thể hiện của lớp' Plant', do đó một thể hiện của một 'Plant' được yêu cầu để gọi nó. Trong 'main' của bạn, bạn có một lời gọi đến phương thức mà không có một cá thể của một đối tượng gọi nó. Hoặc là làm cho phương thức tĩnh hoặc có 'plantA' hoặc' plantB' gọi nó. –

0

Hơi không rõ ý bạn là gì. Là trung bình của chính nhà máy? Trung bình của hai cây. Tôi giả định sau. Sau đó, một cách để thực hiện nó là gọi phương thức như là một thành viên tĩnh và chuyển vào trong lá làm đối số.

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

Đây là phiên bản đơn giản cho phép bạn chuyển số lượng nhà máy và tính trung bình.

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); 
    } 
} 

... hoặc nếu bạn muốn nhận được một chút fancier, và muốn thử ra một số mới hơn 8 tính năng Java, bạn có thể sử dụng con suối để tính trung bình như thế này:

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"); 
    } 
} 
Các vấn đề liên quan