我有一个这样的问题。用户将 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;
}
}
最佳答案
您可以像这样调用构造函数中的 2 个方法
// 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
实例变量不是。您可能希望将在 calculateMean()
方法中计算的average
分配给它,并且您可能希望通过某种方法或 toString()
打印它code> 本身,具体取决于您的需要。
编辑:
您正在使用构造函数中的局部变量 double data[] = new double[6];
来隐藏实例变量 int data[];
,并且这就是您获得 NPE 的原因。从构造函数中删除局部变量,然后像这样初始化它
data[] = new int[5];
下面的 for
循环获取用户的输入,从索引 0
开始,而不是从 1
开始。
for(int i = 0; i < data.length; i++){
关于java - 在构造函数中调用 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20322239/