程序中的Java- Integer未更新

时间:2015-01-23 03:42:26

标签: java

最近,我的老师已经指派我做一个模拟电视的程序。

我应该在调用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;
    }

}

如果您需要其他代码,我会发布! 我之前已经被要求将整个班级放在这里,我不希望犯同样的错误!

3 个答案:

答案 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++
}