前面是Car类和CarStatus类,后面是测试类TestCar,问题:最后面ff的两次赋值,只能赋一次,第二次编译时就会出现错误:  无法访问的语句  ff = trafficAdmin.isLegalSpeed(trafficAdmin.getCarStatus(normalCar)); 不知为什么?大神帮帮忙!!!public class Car {
String name = "haha";
String color;
String direction;
int speed;
boolean isTrafficAdmin;

public Car() {
  this(50,"beijing");
}

public Car(int p_speed,String p_direction) {
this(p_speed,p_direction,false);
}

public Car(int p_speed,String p_direction,boolean isTrafficAdmin) {
this.speed = p_speed;
this.direction = p_direction;
this.isTrafficAdmin = isTrafficAdmin;
}

public void dirveCar() {
speed = 50;
direction = "beijing";
}

public void raiseSpeed (int p_speed) {
if(p_speed < 0) {
System.out.println("加速度不能为负数");
return;
}else {
int currentspeed = speed + p_speed;
speed = currentspeed;
}
}

public void raiseSpeed (byte p_speed) {
if(p_speed < 0) {
System.out.println("加速度不能为负数");
return;
}else {
int currentspeed = speed + p_speed;
speed = currentspeed;
}
}

public void overTakeCar( Car another) {
speed = another.speed + 5;
direction = another.direction;
}

public void setSpeedAndDirection(int p_speed,String direction) {
speed = p_speed;
this.direction = direction;
}

public boolean isOverSpeed() {
if (speed > 60) {
return true;
}else
return false;
}

public void setAnotherCarName(Car another,String newName) {
if(!isTrafficAdmin) {
System.out.println("你没有权限");
return;
}else {
another.name = newName;
}
}

public void setSpeed(Car another) {
if(!isTrafficAdmin) {
System.out.println("你没有权限");
return;
}else {
another.speed = 0;
}
}

public CarStatus getCarStatus(Car another) {
CarStatus status = new CarStatus(another.speed,another.direction);
return status;
}

public boolean isLegalSpeed(CarStatus status) {
if(status.speed<=60) {
return true;
}else {
return false;
  }
}

public void printCar() {
System.out.println(speed);
System.out.println(direction);
}
}
 public class CarStatus {
  int speed;
  String direction;

    public CarStatus() {
    }
    
    public CarStatus(int p_speed,String direction) {
     this.speed = p_speed;
     this.direction = direction;
    }
  }
public class TestCar {
public static void main(String[] args) {
Car normalCar = new Car();
normalCar.printCar();
Car crazyCar = new Car();
crazyCar.printCar();
Car trafficAdmin = new Car(40,"beijing",true);
trafficAdmin.printCar();
crazyCar.raiseSpeed(10);
crazyCar.printCar();
crazyCar.raiseSpeed((byte)10);
crazyCar.printCar();
normalCar.overTakeCar(crazyCar);
normalCar.printCar();
normalCar.setSpeedAndDirection(50,"beijing");
normalCar.printCar();
/*boolean ff = trafficAdmin.isLegalSpeed(trafficAdmin.getCarStatus(normalCar));
if(ff) {
trafficAdmin.setAnotherCarName(normalCar,"good");
System.out.println(normalCar.name);
return;                                                                         
}else {
return;
  }*/
  //normalCar.printCar();     这句怎么无法访问呢?
  
  boolean ff = trafficAdmin.isLegalSpeed(trafficAdmin.getCarStatus(crazyCar));
  if(ff) {
trafficAdmin.setAnotherCarName(normalCar,"good");
System.out.println(normalCar.name);
return;
}else {
trafficAdmin.setSpeed(crazyCar);
crazyCar.printCar();
  return;
  }
  
 ff = trafficAdmin.isLegalSpeed(trafficAdmin.getCarStatus(normalCar));
if(ff) {
                                                                                   trafficAdmin.setAnotherCarName(normalCar,"good");                                               
System.out.println(normalCar.name);
return;
}else {
return;
  }
}
}

解决方案 »

  1.   

    if(ff) {
      trafficAdmin.setAnotherCarName(normalCar,"good");
      System.out.println(normalCar.name);
      return; // 立即退出当前函数
    }else {
      trafficAdmin.setSpeed(crazyCar);
      crazyCar.printCar();
      return; // 立即退出当前函数
    }你的IF语句,两个分支的最后一句都是直接 return,也即立即退出当前函数,那么后面的所有语句自然是不可能执行的到的了。
      

  2.   

    "你的IF语句,两个分支的最后一句都是直接 return,也即立即退出当前函数",这个当前函数是不是main()方法?
      如果我只写一个这样的IF语句并且是最后的语句,好像也不会出错(我试验是这样的)?
      我晕,好像真是退出的main()方法,我把上面的第一个return去掉,然后再IF语句外面加System.out.println(normal.name);验证,居然没反应。当我都去掉时,就可以打印出来信息。
    我应该没判断错吧?我是在一个方法中看到里面有IF判断用return结束,他说能退出方法。不过他没有两个分支都写return……
    悲催,浪费我一下午时间。
      
      

  3.   


    "你的IF语句,两个分支的最后一句都是直接 return,也即立即退出当前函数",这个当前函数是不是main()方法?
      如果我只写一个这样的IF语句并且是最后的语句,好像也不会出错(我试验是这样的)?
      我晕,好像真是退出的main()方法,我把上面的第一个return去掉,然后再IF语句外面加System.out.println(normal.name);验证,居然没反应。当我都去掉时,就可以打印出来信息。
    我应该没判断错吧?我是在一个方法中看到里面有IF判断用return结束,他说能退出方法。不过他没有两个分支都写return……
    悲催,浪费我一下午时间。
       
      

  4.   

    如果我只写一个这样的IF语句并且是最后的语句,好像也不会出错(我试验是这样的)?
    —— return后面如果没有其它可执行语句,是正确的。
    我晕,好像真是退出的main()方法,我把上面的第一个return去掉,然后再IF语句外面加System.out.println(normal.name);验证,居然没反应。当我都去掉时,就可以打印出来信息。
    我应该没判断错吧?
    —— 退出当前函数,你的当前函数是main,当然就会退出main。