最近,我的老师已经指派我做一个模拟电视的程序。
我应该在调用raiseVolume方法时添加音量。但是,在调用它时,看起来音量不会受到任何影响。
我不知道为什么会这样。
(myTv是Tv中构造函数的对象) 这是电视驱动程序类的代码 -
System.out.println ("Crank it up!");
int oldVolume = myTv.getVolume();
do {
oldVolume = myTv.getVolume();
myTv.raiseVolume();
} while (myTv.getVolume() != oldVolume);
System.out.println ("\t\tThe TV is " + myTv.getPower() +
" on channel " + myTv.getChannel() +
" at volume " + myTv.getVolume());
System.out.println ("That's a bit too loud");
myTv.lowerVolume();
myTv.lowerVolume();
这是我的电视类代码 -
private int volume = 0;
...
//Volume
public int getVolume(){
return volume;
}
public void raiseVolume(){
volume+=5;
}
public void lowerVolume(){
volume-=1;
if (volume > 0){
volume = 0;
}
}
如果您需要其他代码,我会发布! 我之前已经被要求将整个班级放在这里,我不希望犯同样的错误!
答案 0 :(得分:3)
因为您在lowerVolume
之后致电raiseVolume
:
public void lowerVolume(){
volume-=1;
if (volume > 0){
volume = 0;
}
}
它总是将音量设置为0,此时为volume > 0
(至少为5),您应该将其更改为:
if (volume < 0){
volume = 0;
}
答案 1 :(得分:2)
这两个值永远不会相等,您的while
循环才会终止。在通话前后打印音量,您会看到它发生变化(假设您正在使用已发布的代码)
System.out.printf("oldVolume = %d%n", myTv.getVolume());
myTv.raiseVolume();
System.out.printf("newVolume = %d%n", myTv.getVolume());
此外,您的lowerVolume
方法始终将音量设置为0
(如果它大于零)。我认为你的意思不到
public void lowerVolume(){
volume--; // <-- does - 1
if (volume < 0){ // <-- less than
volume = 0;
}
}
为raiseVolume()添加max可能是个好主意。最后,我建议你将增量(和减量)设置为相同的值(或将该值传递给方法);这就像
private static final int MAX_VALUE = 100;
private static final int MIN_VALUE = 0;
public void lowerVolume(int change) {
volume -= change;
volume = Math.max(volume, MIN_VALUE);
}
public void raiseVolume(int change) {
volume += change;
volume = Math.min(volume, MAX_VALUE);
}
或者,
public void lowerVolume() {
volume--;
volume = Math.max(volume, MIN_VALUE);
}
public void raiseVolume() {
volume++;
volume = Math.min(volume, MAX_VALUE);
}
答案 2 :(得分:-1)
尝试一下开始音量为0的行,所以当你得到音量时你可以用类似的东西写
if(tv.getvolume == 0){
volume++
}