0

我目前正在研究以下问题作为修订:

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

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

VolumeModel -类名

静音:int -属性

级别:int -属性

+..methods.. -类的方法

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软件。

4

2 回答 2

2

一些备注:

  • 你忘了声明返回类型setMuted()
  • 没有javadoc。尽管大多数方法都是显而易见的,但turnUp(int level)例如,它们的作用是什么?参数是新级别(在这种情况下,它与 做同样的事情setLevel()),还是增量?使用无参数构造函数构造时,对象的状态是什么?
  • 如果equals()被覆盖,那么hashCode()也必须被覆盖。约定是相等的对象必须具有相同的 hashCode。此外,该equals方法应采用Objectas 参数。您可以实现一个equals(VolumeModel)方法,但请注意您不会覆盖该Object.equals()方法,因此该方法将永远不会被集合类调用。
  • turnUp方法很奇怪,但没有turnDown
  • 没有限制是很奇怪的(尽管问题中没有提出)。

最后,您的代码段没有执行所要求的操作。它应该:

  • 创建一个唯一的VolumeModel实例,将音量设置为 1 且未静音
  • turnUp()循环调用9 次迭代
  • 通过调用将其静音setMuted(true)
  • 调用getLevel()andisMuted()并分别检查值是10true。该问题不要求您实现 equals 并测试两个 VolumeModel 实例之间的相等性。
于 2012-04-13T15:05:37.313 回答
1

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

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

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

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

public void outputState(VolumeModel v)

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

希望这可以帮助。

于 2012-04-13T15:17:40.803 回答