java为什么inc/dec频道什么都不做?
在下面的代码中,我的测试表明tvObject.incChannel(...)
和tvObject.decChannel(...)
方法不会改变代码中的任何内容。为什么?
package lab2;
public class TV {
private int channelNumber;
private int volumeLevel;
private String status = "ON";
public TV(int channel, int vol, String stat) {
status = stat;
setChannelNumber(channel);
setVolumeLevel(vol);
}
public void setChannelNumber(int channel) {
if (status.equalsIgnoreCase("ON")) {
channelNumber = channel;
} else if (status.equalsIgnoreCase("OFF")) {
System.out.println("Error TV is off");
}
}
public int getChannelNumber() {
return channelNumber;
}
public void setVolumeLevel(int vol) {
if (status.equalsIgnoreCase("ON")) {
volumeLevel = ((vol >= 0 && vol <= 100)?vol:0);
} else if (status.equalsIgnoreCase("OFF")) {
System.out.println("Error TV is off");
}
volumeLevel = ((vol >= 0 && vol <= 100)?vol:0);
}
public int getVolumeLevel() {
return volumeLevel;
}
public void incVol(int vol) {
if (status.equalsIgnoreCase("ON")) {
volumeLevel = ((vol >= 0 && vol <= 98)?vol += 2:volumeLevel);
} else if (status.equalsIgnoreCase("OFF")) {
System.out.println("Error TV is off");
}
}
public void decVol(int vol) {
if (status.equalsIgnoreCase("ON")) {
volumeLevel = ((vol >= 2 && vol <= 100)?vol -= 2:volumeLevel);
} else if (status.equalsIgnoreCase("OFF")) {
System.out.println("Error TV is off");
}
}
// does not do anything
public void incChannel(int channel) {
if (status.equalsIgnoreCase("ON")) {
channelNumber = channel++;
} else if (status.equalsIgnoreCase("OFF")) {
System.out.println("Error TV is off");
}
}
// does not do anything
public void decChannel(int channel) {
if (status.equalsIgnoreCase("ON")) {
channelNumber = channel--;
} else if (status.equalsIgnoreCase("OFF")) {
System.out.println("Error TV is off");
}
}
public void Toggle() {
//String status = "ON"; //default on
if (status.equalsIgnoreCase("ON")) {
status = "OFF";
} else if (status.equalsIgnoreCase("OFF")) {
status = "ON";
}
}
}
// code to test
package lab2;
public class Test {
public static void main(String[] args) {
TV tvObject = new TV(53, 35, "ON");
//TV tvObject2 = new TV(3, -10, "on");
//TV tvObject3 = new TV(3, -10, "OFF");
tvObject.Toggle();
tvObject.setChannelNumber(53);
tvObject.incChannel(53);
tvObject.setVolumeLevel(35);
tvObject.decVol(35);
System.out.println(tvObject.getChannelNumber());
System.out.println(tvObject.getVolumeLevel());
}
}
# 1 楼答案
channelNumber = channel++
表示首先将通道分配给channelNumber,然后增加其值channelNumber = ++channel
表示首先增加通道值,然后将其分配给cannelNumber# 2 楼答案
后缀增量运算符(因此,变量名之后的“
++
”)首先计算表达式,然后才递增因此,a
channelNumber = channel++
等价于以下内容因为
channel
只是方法中的一个参数,所以它的增加不会改变任何东西(后面的方法中不会使用它),从而将语句简化为channelNumber = channel;
表达式最简单的代码修复程序如下:
。。。因为前缀增量运算符(“
++
”在变量名之前)首先增加,然后才计算。在这种情况下,有问题的语句的工作原理如下这可能就是你想要的