如何在验证中解决这些错误?

时间:2015-05-26 19:52:00

标签: java

作为一项新课程练习,我被要求做一个类似于使用某些要求的汽车功能的“课程”。

该类应使用以下属性:

state (int)
fuel (int)
maxspeed (int)

状态如下:

0 = turned off
1 = stopped
2 = accelerating
3 = not functional
4 = no fuel

我必须创建以下方法:

"accelerate", it should receive a number as speed
"brake"
"crash"

现在,验证如下:

The car can not accelerate if it is turned off (0), not functional (3), or no fuel (4).

It cannot accelerate more than maximum speed.

When there's a crash the car goes not functional (3)

Every time the car accelerates it loses 2 of fuel units

现在,验证可能看起来很简单,但不知怎的,我在验证汽车何时加速时遇到了麻烦。在我的代码中,即使在发生碰撞或没有燃料之后,汽车也会继续加速。它也会在碰撞,关闭或没有燃料后改变状态。

这是我的代码:

private int state;
private int fuel;
private int speed;


 public car() // constructor
{
    this.state = 1;
    this.fuel = 30;
    this.speed = 0;
    int Maxspeed = 200;
}

public void setState(int state){
    switch(state){
        case 0:
            this.state = 0;
            this.speed = 0;
            break;
        case 1:
            this.state = 1;
            this.speed = 0;
            break;
        case 2 :
            this.state = 2;
            break;
        case 3 :
            this.state = 3;
            this.speed = 0;
            break;
        case 4 :
            this.state = 4;
            this.speed = 0;
            this.fuel = 0;
            break;    

    }
}

public void accelerate(int v){


   if(this.state == 0 || this.state == 3 || this.state == 4){
      v = 0;
      this.speed = v;                  

    }

   if(this.fuel != 0 && this.state != 4 || this.state != 3){ 
       if(v > 200 || this.speed == 200){
           if(this.fuel < 30){
               this.speed = 200;
               this.state = 2;
            }
           else{
            this.speed = 200;
            this.state = 2;
            this.state -= 2;
           }
               }
               else{
                   this.speed += v;
                   this.fuel -= 2;
                   this.state = 2;
                }
            }                        
        }

public void Stop(){
    while(this.state == 2){
        this.speed = 0;
        this.state = 1;
    }

  }

public void Crash(){
    if(this.state == 2){
        this.state = 3;
        this.speed = 0;
    }
}

}

此外,没有询问练习,但我怎么能用字符串而不是数字来显示状态呢?

我也被要求通过使用System void main来测试它,但我不完全确定如何建立连接。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

您的主要问题在if (this.fuel != 0 && this.state != 4 || this.state != 3) {,对我来说就是第52行。看起来您从第46行复制粘贴错误。this.state != 4将评估为true,除非状态为4. this.state != 3将评估为true,除非状态为3. this.state != 4 || this.state != 3将始终评估为真,因为其中一个将永远是真的。也就是(true || anything) == true。将||更改为&&

接下来,如果您的汽车被给予一个奇数的燃料,它将永远运行。减少燃料的每一行都是2,你正在检查是否fuel != 0。如果燃油在-1,那么fuel != 0是正确的,即使你的汽车被认为没有燃料。相反,你想检查燃料是否为正,即fuel > 0

最后,第61行您正在更改this.state而不是this.fuel

我建议更改accelerate(v)stop()crash()中设置this.state == s的所有地点,而不是调用setState(s),以便setState() 1}}处理副作用变化(如燃料和速度),而不是在这三个地方的每个地方重复相同的功能。

  

此外,没有询问练习,但我怎么能用字符串而不是数字来显示状态呢?

创建一个根据Car的状态返回String的方法。类似的东西:

public String getStateName() {
    switch (state) {
        case 0: return "turned off";
        case 1: return "stopped";
        case 2: return "accelerating";
        case 3: return "not functional";
        case 4: return "no fuel";
        default: return null;
    }
}

(请注意,每个case都会return一个值,这就是为什么他们在每个案例结束时都不需要break。)

  

我也被要求通过使用System void main来测试它,但我不完全确定如何建立连接。有什么帮助吗?

添加方法public static void main(String[] args) { ... },它是程序的入口点。创建一个new Car()变量,然后调用此Car的各种方法,并使用System.out.println(...)将所需信息打印到控制台。例如:

public static void main(String[] args) {
    // make a Car.
    Car myCar = new Car();
    myCar.printCarStatus();

    // turn the car on
    myCar.setState(1);
    myCar.printCarStatus();

    // speed up
    myCar.accelerate(20);
    myCar.printCarStatus();

    // brake
    myCar.stop();
    myCar.printCarStatus();

    // speed up, put the pedal to the metal
    myCar.accelerate(1000); // car tops out at 200
    myCar.printCarStatus();

    // lost control of my car, crash
    myCar.crash();
    myCar.printCarStatus();
}

public void printCarStatus() {
    System.out.println("State: " + this.state);
    System.out.println("Fuel: " + this.fuel);
    System.out.println("Speed: " + this.speed);
    System.out.println(); // prints an empty line so we don't get entries mixed up.
}

但是编写自己的main()方法,不要只复制我的方法。记住 - 你正在上课学习,所以试试看并尝试。如果您只是复制我的示例并将其粘贴到您的代码中,那么您就是在欺骗自己。祝你好运!