0

我有一个带有 4 个布尔值的“class Car”类:

class Car {
    boolean mWheel1 = true
    boolean mWheel2 = true
    boolean mWheel3 = true
    boolean mWheel4 = true
}

我还有一个方法“void removeWheel”,我只传递了 1 个参数,即轮号:

void removeWheel(int wheelNum) {
    // I need help with the following line
    Car.mWheel(wheelNum) = false
}

最后一行是我需要帮助的地方。当我只将数字(1、2、3、4)传递给我的移除车轮方法时,如何在 Car 类中引用正确的“Car.mWheel”数字变量?

请记住,我可能会为我的汽车添加 100 多个轮子,因此我想动态连接对“Car.mWheel(wheelNum)”的引用,而不是执行一些 if 语句或静态解决方案。

4

4 回答 4

4

代替

class Car {
    boolean mWheel1 = true
    boolean mWheel2 = true
    boolean mWheel3 = true
    boolean mWheel4 = true
}

void removeWheel(int wheelNum) {
    // I need help with the following line
    Car.mWheel(wheelNum) = false
}

class Car {
    boolean mWheel[4] = {true, true, true, true};
}

void removeWheel(int wheelNum) {
    mWheel[wheelNum] = false;
}
于 2013-10-15T02:03:58.307 回答
1

这就是类的外观:

public class Car {

    private boolean[] wheels = new boolean[4];

    public Car() {
        for (int i = 0; i < 4; i++) {
            wheels[i] = true;
        }

    }

    public void removeWheel(int wheelNum) {
        getWheels()[wheelNum] = false;
    }

    /**
     * @return the wheels
     */
    public boolean[] getWheels() {
        return wheels;
    }

    /**
     * @param wheels the wheels to set
     */
    public void setWheels(boolean[] wheels) {
        this.wheels = wheels;
    }
}
于 2013-10-15T02:03:41.263 回答
1

是的,在这个简单的示例中,您希望为轮子使用数组或集合。但是通过名称动态访问属性可能有合理的理由,您可以使用反射 API 这样做:

void removeWheel(int wheelNum) throws Exception {
    Car.class.getDeclaredField("mWheel" + wheelNum).setBoolean(this, false);
}        
于 2013-10-15T02:57:35.170 回答
0

上面的数组是最好的选择,但如果你想在不改变属性的情况下这样做:

void removeWheel(int wheelNum) {
    switch (wheelNum) {
        case 1:
            mWheel1 = false;
            break;
        case 2:
            mWheel2 = false;
            break;
        case 3:
            mWheel3 = false;
            break;
        case 4:
            mWheel4 = false;
            break;
        default:
            break;
    }
}
于 2013-10-15T02:13:46.600 回答