【问题标题】:Using mutator and accesor methods in Java and creating objects to calculate the average of numbers在 Java 中使用 mutator 和 accessor 方法并创建对象来计算数字的平均值
【发布时间】:2020-10-10 18:56:11
【问题描述】:

我的任务是创建一个类来对一系列数字进行计数、求和和平均。 AverageCalculator 类的规范是:

用于平均计算器的运行总和的 int 类型的实例变量
int 类型的实例变量,用于计算已提供给 AverageCalculator 的数字
无参数构造函数:Ave​​rageCalculator()
将数字添加到 AverageCalculator 的 mutator 方法:void add(int newNum)
一个访问器方法,用于返回添加到 AverageCalculator 的所有数字的总和:int getSum()
返回添加到 AverageCalculator 中的数字的计数或数量的访问器方法:int getCount()
一个访问器方法,用于返回添加到 AverageCalculator 中的所有数字的平均值 - 请注意,实例变量是 int,返回类型是 double,如果没有向对象添加数字,则返回 0:double getAverage()

编写一个包含 main 方法并执行以下操作的类 AverageCalculatorMain:

  • 创建一个AverageCalculator 对象,在AverageCalculator 之外加一个数字,打印总和、计数和平均值
  • 创建另一个AverageCalculator 对象。将三个数字相加,打印总和、计数和平均值

这是我目前所拥有的:


public class AverageCalculator {
    private int sum;
    private int count;
    
    public AverageCalculator() {
        sum = 0;
        count = 0;
    }
    public void add(int newNum) {
        this.sum = this.sum + newNum;
        count++;
    }
    
    int getSum() {
        return sum;
    }
    
    int getCount() {
        return count;
    }
    
    double getAverage() {
        return sum / count;
    }
    
}

这就是我的主要方法:

public class AverageCalculatorMain {

    public static void main(String[] args) {
        
        AverageCalculator average = new AverageCalculator(90);
        
        System.out.println("The sum is " + average.getSum() + "\nThe count is " + average.getCount() + "\nThe average is " + average.getAverage());
        

    }

}

但是,当我尝试创建新对象 (AverageCalculator average = new AverageCalculator(90);) 时,出现一个错误,提示它未定义。如何创建此对象并成功传递其值?

【问题讨论】:

  • 该错误意味着您需要定义一个接受int参数的构造函数。或者您可以使用默认构造函数。旁白 - 因为您使用整数除法(例如 5/3 -> 1),您可能会得到不准确的平均值计算。
  • 如何通过整数除法产生双精度数?
  • 忽略添加另一个构造函数的建议,这不是此分配所必需的。只需删除参数,然后在对象上调用add,如下所示:average.add(90)

标签: java eclipse oop accessor mutators


【解决方案1】:

问题是您正在尝试使用parametrised constructor 创建一个对象

 AverageCalculator average = new AverageCalculator(90);

但是你的AverageCalculator 类中没有parametrised constructor

所以改成

 AverageCalculator average = new AverageCalculator();

创建一个参数化的构造函数。

public AverageCalculator(int count) {
    this.count = count;
}

或者根据您的需要,您可以使用两个参数创建,即sumcount

编辑:

你可以有setter方法

public void setCount(int sum) {
  this.sum = sum;
}

并且在对象创建之后,你可以调用这个方法来设置值。

【讨论】:

  • 如果我不使用参数化构造函数,我如何输入要添加的数字的值?
  • 如果您不想使用parametrised constructor,请检查我的编辑
  • 我还是有点困惑。为什么我要输入总和来设置计数?如果我想传入一系列数字并让程序计算总和,就像我在public void add(int newNum) 中所做的那样?
  • 你需要打开一个新问题,我觉得如此。希望我解决了您与undefined 相关的问题。我只是说variable 的名字是 sum。您必须使用集合,即 java.util.List 来传递一系列数字。
  • 根据任务描述,他应该既没有参数构造函数也没有setter,只需在第一个创建的对象上调用add一次,在第二个创建的对象上调用3次。
【解决方案2】:

在你的类中定义两个构造函数,

无参数构造函数 和一个 arg 构造函数

public AverageCalculatorMain(){}
public AverageCalculatorMain(int x){
 sum = x;
}

如果您打算在运行时传递未知数量的参数,那么您应该使用可变参数构造函数

public AverageCalculatorMain(int ...x){
     
    }

或者最好还是将集合作为参数传递给构造函数

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多