我有一个像这样的问题。用户将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;
}
}
答案 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++){