在Java中创建方法和测试类

时间:2012-04-13 14:49:26

标签: java computer-science class-method

我目前正在处理以下问题作为修订版:

VolumeModel存储卷控制对象的数据。音量有水平,也可以处于静音状态。

(以下是UML图中绘制的内容:)

VolumeModel - 班级名称

静音:int - 属性

级别:int - 属性

+ ..方法.. - 类的方法

a)记下您希望在此类中看到的所有方法头,包括构造函数,以使其符合支持数据封装的传统标准。 (不要编写方法体或文档。)

作为我对这个问题的回答,我写道:

public VolumeModel()
public VolumeModel(boolean muted, int level)
public void setLevel(int level)
public int getLevel()
public setMuted(boolean muted)
public boolean isMuted()
public void turnUp()
public void turnUp(int level)
public String toString()
public boolean equals(VolumeModel V)

我不知道这是否是所有预期的方法标题,包括构造函数,由于下面的问题(与上面的问题有关),预期会在此类中看到:

b)使用您在(a)部分中声明的方法,将测试程序的代码写入:

  • 创建卷模型的实例...
  • ,音量等级为1且未静音:
  • 循环播放,将音量稳定增加到10级:
  • 然后将音量静音;
  • 最终输出卷模型对象的状态

到目前为止,作为我对上述问题的回答,我已经这样做了:

VolumeModel vml = new VolumeModel();
vml.setLevel(1);
vml.setMuted(false);

VolumeModel volumelevel = new VolumeModel(true, 11);
while (!vml.equals(volumelevel)
{
 //to be completed  
}

上面那段代码没有完成,因为我正在努力,所以如果有任何人可以给我的提示,那么我会很感激。

此外,对我对以下问题a)的回答的任何建议和反馈也会有所帮助。

提前致谢。

ps - 我无法在我的eclipse软件上尝试这个代码,因为我的eclipse软件由于某种原因无法在我的笔记本电脑上工作,但是当我抽出时间去我的计算机实验室时,我会看看我是否可以测试那边的计算机上的eclipse软件上的代码。

2 个答案:

答案 0 :(得分:2)

一些评论:

  • 您忘记声明setMuted()
  • 的返回类型
  • 没有javadoc。虽然大多数方法都很明显,但turnUp(int level)会做些什么呢?参数是新级别(在这种情况下它与setLevel()完全相同),还是增量?使用no-arg构造函数构造时对象的状态是什么?
  • 如果equals()被覆盖,则hashCode()也必须被覆盖。合同是等于对象必须具有相同的hashCode。此外,equals方法应该以{{1​​}}为参数。您可以实现Object方法,但请注意,您不会覆盖equals(VolumeModel)方法,因此集合类永远不会调用此方法。
  • 使用Object.equals()方法很奇怪,但没有turnUp
  • 没有限制是很奇怪的(虽然在问题中没有提到)。

最后,您的代码段不会执行要求的操作。它应该:

  • 创建一个唯一的turnDown实例,其中卷设置为1而不是静音
  • 在9次迭代循环中调用VolumeModel
  • 通过调用turnUp()
  • 将其静音
  • 致电setMuted(true)getLevel()并检查值分别为isMuted()10。 问题不是要求您实现equals并测试两个VolumeModel实例之间的相等性。

答案 1 :(得分:1)

您无需创建要测试的新VolumeModel。您也不需要equals方法。

而不是做一个循环尝试这个:

for(i=2;i<11;i++){
    vml.turnUp(); //provided that turnUp sets the volume up a level
}
vml.setMuted(true);

此时,您应指定如何输出Object的状态。 而不是试图重新实现toString,就像你正在做的那样,你可以用这种方式创建自己的outputState()

public void outputState(VolumeModel v)

返回类型无效,因为您可以简单地放置一系列System.out,或者您喜欢的任何输出系统。

希望这有帮助。