有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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());
    }
}

共 (2) 个答案

  1. # 1 楼答案

    It should be like this:

    public void incChannel(int channel) {
            if (status.equalsIgnoreCase("ON")) {
                channelNumber = ++channel; // use either this
                // channelNumber = channel+1; // or this
            } else if (status.equalsIgnoreCase("OFF")) {
                System.out.println("Error TV is off");
            }       
        }
    
    public void decChannel(int channel) {
            if (status.equalsIgnoreCase("ON")) {
                channelNumber =  channel; // use either this
                // channelNumber = channel-1; // or this
            } else if (status.equalsIgnoreCase("OFF")) {
                System.out.println("Error TV is off");
            }       
        }
    

    channelNumber = channel++表示首先将通道分配给channelNumber,然后增加其值

    channelNumber = ++channel表示首先增加通道值,然后将其分配给cannelNumber

  2. # 2 楼答案

    后缀增量运算符(因此,变量名之后的“++)首先计算表达式,然后才递增

    因此,a channelNumber = channel++等价于以下内容

    channelNumber = channel;
    channel = channel + 1;
    

    因为channel只是方法中的一个参数,所以它的增加不会改变任何东西(后面的方法中不会使用它),从而将语句简化为channelNumber = channel;表达式

    最简单的代码修复程序如下:

    // so it already works
    public void incChannel(int channel) {
        if (status.equalsIgnoreCase("ON")) {
            channelNumber = ++channel;
        } else if (status.equalsIgnoreCase("OFF")) {
            System.out.println("Error TV is off");
        }       
    

    。。。因为前缀增量运算符(“++变量名之前)首先增加,然后才计算。在这种情况下,有问题的语句的工作原理如下

    channel = channel + 1;
    channelNumber = channel;
    

    这可能就是你想要的