java - 在构造函数中调用 void 方法

标签 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;
}
}

最佳答案

您可以像这样调用构造函数中的 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/

相关文章:

java - JSON 输出包含星号而不是值

java - 为什么矩形没有在框架上移动?

java - Java中一个数是另一个数的倍数吗

Java 从另一个类调用数组

java - 为什么当我使用 DriverManager.getConnection 时,我的 SQL 连接会卡住,但没有任何错误?

java - 使用 BufferedReader 排序读入

JavaFX 应用程序类 - 默认构造函数和 init 方法之间的区别

java - 如何在所有窗口的顶部显示 JOptionPane

java - 制作可双击的 Jython .jars

java - InputStream类型的System.in如何初始化?