【问题标题】:array/data set constructor questions数组/数据集构造函数问题
【发布时间】:2012-12-14 21:25:19
【问题描述】:

我正在创建一个程序,它获取用户的信息并输出最小值、最大值、平均值、总和,并计算其中有多少值。我真的很难弄清楚如何创建 100 个项目的默认构造函数以及用户应该定义的数组大小。

  • 创建一个新的 DataSet 对象。创建对象的客户端指定最大数量 可以添加到集合中的项目。 (用一个 int 参数编写一个构造函数。)

  • 还要编写一个默认构造函数,它创建一个能够处理 100 个项目的 DataSet。

  • 将整数数据项添加到 DataSet。如果已将最大数量的项目添加到集合中,则直接忽略该项目。

这是我的代码

    import javax.swing.*;
    import java.util.*;
    public class DataSet {

        private int count; // Number of numbers that have been entered.
        private double sum; // The sum of all the items that have been entered.
        private double min;
        private double max;

        //Adds numbers to dataset.    
            public void addDatum(double num) {
            count++;
            sum += num;
            if (count == 1){
            min = num;
            max = num;
        } else if (num < min){
            min = num;
        } else if (num > max){
            max = num;
        }
    }

    public boolean isEmpty() 
    {
        if(count == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    //Return number of items entered into the dataset.     
    public int getCount() {
        return count;
    }

    //Return the sum of all the numbers that have been entered.   
    public double getSum() {
        return sum;
    }

    //Return the average of all the numbers that have been entered.       
    public double getAvg() {
        return sum / count;
    }

    //return Maximum value of data entered.
    public double getMax(){
        return max;
    }

    //return Minimum value of data entered.
    public double getMin(){
        return min;
    }

    public static void main (String[] args){

        Scanner scanner = new Scanner(System.in);
        DataSet calc = new DataSet();
        double nextnumber = 0;

        while (true){
            System.out.print("Enter the next number(0 to exit): ");
            nextnumber = scanner.nextDouble();
            if (nextnumber == 0)
                break;
            calc.addDatum(nextnumber);
        }

        System.out.println("Min = "+calc.getMin());
        System.out.println("Max = "+calc.getMax());
        System.out.println("Mean = "+calc.getAvg());       
        System.out.println("Count = "+calc.getCount());
        System.out.println("Sum = "+calc.getSum());
    }

} //end class DataSet

【问题讨论】:

  • 那么你的问题是什么?您在保存和检查限额时遇到问题吗?

标签: java arrays parameters constructor


【解决方案1】:

声明数组的语法是type[] name;(有变种,但这是最常见的)

所以一个 int 数组是这样声明的:

int[] someIntegers;

可以通过多种方式创建新数组。正常的方法是创建一个空数组,其中所有元素都初始化为其默认值(原始数据类型为零或 false,对象数组为 null)。语法是:

someIntegers = new int[4]; // ie. [0, 0, 0, 0] 
// or
int n = ...; // intitalise n some how
someIntegers = new int[n]; 
// this way we can get different length arrays at runtime

【讨论】:

    【解决方案2】:

    您必须添加一个变量来保存最大数量的数字。

    int max = 0;
    

    那么你需要两个构造函数:

    Dataset() {
        max = 100;
    }
    
    Dataset(int max) {
        this.max = max;
    }
    

    那么当你得到输入的时候,你必须在做任何事情之前检查你是否达到了数量限制。

    System.out.print("Enter the next number(0 to exit): ");
    nextnumber = scanner.nextDouble();
    if (count < max) {
        if (nextnumber == 0) {
            break;
        }
        calc.addDatum(nextnumber);
    }
    

    【讨论】:

    • 我的回复没有使用数组,因为您似乎只是在跟踪最大值、最小值、总和和平均值,而无需存储输入的每个数字。
    【解决方案3】:

    您上面的代码不包含任何构造函数,因此只有默认的 DataSet() 构造函数可用。在您的 DataSet 类中,您需要定义这两个构造函数以满足您的要求。此外,您将需要创建一个集合类型(即整数数组)来存储添加到数据集的数字(这似乎是您要求的一部分)。使用下面的代码,当您在 main 方法中创建 DataSet 类的实例时,您可以通过说

    使用默认的 100 个元素创建它
    DataSet myDataSet = new DataSet();
    

    或者您可以使用用户指定数量的元素来创建它,例如

    DataSet myDataSet = new DataSet(30); //for thirty elements in the array
    

    public class DataSet {
    
     int[] myArray;
     public DataSet() //Zero parameters constructor
     {
       //initialize your array to 100 elements here
       myArray = new int[100];  //the array can hold 100 elements
     }
    
     public DataSet(int max) //One parameter constructor
     {
      //initialize your array to 'max' elements here
      myArray = new int[max]; //the array can hold max number of elements
     }
    
     public void AddNum(int num)
     {
       //logic to add number to the array here :P
    
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多