将void方法调用到构造函数中

时间:2013-12-02 06:37:07

标签: java

我有一个像这样的问题。用户将5个等级输入到数组中。 然后必须从最高到最低对数组进行排序,然后进行平均。

selectionSort和calculateMean的方法必须为void。

如何将它们调用到我的构造函数中?然后我需要将数据打印到toString。

这是我到目前为止所做的。

import java.util.Scanner;

public class Average {

//the array which will contain the scores
private int data[];
//the average of the scores
private double mean;



public Average(){
    Scanner sc = new Scanner(System.in);

    double data[] = new double[6];

    for(int i = 1; i < data.length; i++){
        System.out.println("Enter score number " + i);
        data[i] = sc.nextDouble();

    }

    /*for(int p = 1;  p < data.length; p ++){
        System.out.println(data[p]);
    }*/
    //selectionSort();




}
public void calculateMean(){
    double total = 0;
    double sum = 0;
    double average = 0;

            for(int counter = 0; counter < data.length; counter++){
                sum = sum + data[counter];
                average = sum / data.length; 

            }

}


public void selectionSort(){
    int temp = 0;
    for(int joey = 0; joey<data.length; joey++){    
        for(int  i = 1; i < data.length; i++) {
            if(data[i - 1] > data[i]) {
            temp = data[i-1];
            data[i-1] = data[i];
            data[i] = temp;
            }
        }
    }
         for(int p = 0; p < data.length; p++){
            System.out.println(data[p]);

    }


    }   
public String toString(){



    return null;
}
}

1 个答案:

答案 0 :(得分:1)

你可以在你的构造函数中调用这两个方法,就像这样

// Inside constructor
selectionSort(); // call the method
calculateMean(); // call the method
System.out.println(toString()); // print the data using toString

您的toString()可能看起来像这样

public String toString() {
    return Arrays.toString(data);
}

此外,calculateMean()中的逻辑有点不对。

for (int counter = 0; counter < data.length; counter++) {
    sum = sum + data[counter];
}
average = sum / data.length; // Calculate the average after finding the sum and not at every iteration.

此外,我发现mean实例变量不是。您可能希望将average方法计算的calculateMean()分配给它,您可能希望根据需要打印一些方法或toString()本身。

修改

您正在使用构造函数int data[];中的局部变量为实例变量double data[] = new double[6];着色,这就是您获得NPE的原因。从构造函数中删除局部变量,然后像这样初始化它

data[] = new int[5];

以下for循环将用户的输入从索引0而不是1开始。

for(int i = 0; i < data.length; i++){