【问题标题】:Why getRoadtaxPrice() function didn't get typeVehicle input value?为什么 getRoadtaxPrice() 函数没有得到 typeVehicle 输入值?
【发布时间】:2021-12-24 02:43:54
【问题描述】:

我还是编程的初学者。这是我的第一年。 我的代码有问题。我希望你们能帮助我。

这是我的主要(VehicleApp.java)

public static void main(String[] args) {
    // TODO code application logic here
    int acc, brake;
    String type, powerTrain;
    
    Scanner sc = new Scanner(System.in);
    Vehicle vehicle = new Vehicle("Car", "Manual", "Electric");               
           
    //input
    
    System.out.println("Type of vehicle? [Car, SUV, MPV, Lorry]: ");
    type = sc.nextLine();
    vehicle.setType(type);
    
    if(type.equals("Lorry")){
        System.out.println("Enter Accelerate: ");
        acc = sc.nextInt();
        vehicle.autoAccelerate(acc);
    
        System.out.println("Enter Brake: ");
        brake = sc.nextInt();
        vehicle.autobrake(brake);
        
        //output
        System.out.println("===========================================\n");
        System.out.println(vehicle.getPowertrain()+" "+vehicle.getType()+".");
        System.out.println("\nAccelerate:\nCurrent Speed = "+vehicle.autoAccelerate(acc)+" kmh");      
        System.out.println("\nBrake:\nCurrent Speed = "+vehicle.autobrake(brake)+" kmh");
        System.out.println("\nPrice: RM "+vehicle.getRoadtaxPrice());
    }
    else{
        System.out.println("Type of powertrain? [Gasoline, Hybrid, Electric]: ");
        powerTrain = sc.nextLine();
        vehicle.setPowertrain(powerTrain);
    
        System.out.println("Enter Accelerate: ");
        acc = sc.nextInt();
        vehicle.autoAccelerate(acc);
    
        System.out.println("Enter Brake: ");
        brake = sc.nextInt();
        vehicle.autobrake(brake);
    
        //output
        System.out.println("===========================================\n");
        System.out.println(vehicle.getPowertrain()+" "+vehicle.getType()+".");
        System.out.println("\nAccelerate:\nCurrent Speed = "+vehicle.autoAccelerate(acc)+" kmh");      
        System.out.println("\nBrake:\nCurrent Speed = "+vehicle.autobrake(brake)+" kmh");
        System.out.println("\nPrice: RM "+vehicle.getRoadtaxPrice());
    }
}

这是我的课(Vehicle.java)

public class Vehicle {
private String typeVehicle, transmissionVehicle, powertrainVehicle;
private int speedVehicle;

public Vehicle(String type, String transmission, String powertrain){
    this.typeVehicle = type;
    this.transmissionVehicle = transmission;
    this.powertrainVehicle = powertrain;
    speedVehicle = 60;
}
        
public int accelerate(){
    return speedVehicle+=10;
}

public int brake(){
    return speedVehicle-=5;
}

//Getter
public String getType(){
    return typeVehicle;
}

//Setter
public void setType(String type){
    //type = this.typeVehicle;
    this.typeVehicle = type;
}
 
//Lab3 Start
public int autoAccelerate(int accelerate){
    for(int i = 0; i < accelerate; i++){
        speedVehicle += 10;
    }
    return speedVehicle;
}

public int autobrake(int brake){
    for(int i = 0; i < brake; i++){
        speedVehicle -= 5;
        
        if(speedVehicle <= 0){
            speedVehicle = 0;
        }
    }
    return speedVehicle;
}

public double getRoadtaxPrice(){
    double price = 0;
    
    if (typeVehicle == "Car"){
                  
        if (powertrainVehicle == "Gasoline"){
            price = 200;
        }
        else if (powertrainVehicle == "Hybrid"){
            price = 100;
        }
        else if (powertrainVehicle == "Electric"){
            price = 50;
        }
        else{
            price = 0;
        } 
        
    }
    
    else if (typeVehicle == "SUV" || typeVehicle == "MPV"){
                    
        if (powertrainVehicle == "Gasoline"){
            price = 300;
        }
        else if (powertrainVehicle == "Hybrid"){
            price = 150;
        }
        else if (powertrainVehicle == "Electric"){
            price = 100;
        }
        else{
            price = 0;
        }                
        
    }
    
    else if (typeVehicle == "Lorry"){
        
        powertrainVehicle = "All";
        price = 400;
                    
    }
     
    return price;
}
//Lab3 End
      
//Getter
public String getTransmission(){
    return transmissionVehicle;
}

//Setter
public void setTransmission(String transmission){
    transmission = this.transmissionVehicle;
}

//Getter
public String getPowertrain(){
    return powertrainVehicle;
}

//Setter
public void setPowertrain(String powertrain){
    powertrain = this.powertrainVehicle;
}

public void output(){
    System.out.println("Type of vehicle: "+getType());
}

}

我的意见:

Type of vehicle? [Car, SUV, MPV, Lorry]: 
MPV
Type of powertrain? [Gasoline, Hybrid, Electric]: 
Hybrid
Enter Accelerate: 
2
Enter Brake: 
2

我的输出:

===========================================

Electric MPV.

Accelerate:
Current Speed = 90 kmh

Brake:
Current Speed = 80 kmh

Price: RM 0.0

输出应该是这样的:

===========================================

Hybrid MPV.

Accelerate:
Current Speed = 90 kmh

Brake:
Current Speed = 80 kmh

Price: RM 150.0

价格和动力总成存在问题。 请帮我! 谢谢。

【问题讨论】:

    标签: java function oop input getter


    【解决方案1】:

    我的第一个想法是 vehicle.typeVehicle 或 vehicle.powertrainVehicle 在它们的末尾有一个你没有考虑的额外空间。但是我们不能仅从您的代码中知道这一点。我建议您学习使用 IDE 的调试器逐步执行您的代码。然后观察它是如何通过代码的,以及每个变量和属性得到的确切值。


    这将是我的评论,然后我更加努力地查看了代码并发现了错误。你有不止一个。使用 IDE 的调试器单步执行您的代码应该可以帮助您解决此类问题,这就是我保留该部分的原因。

    您的 setPowertrain 和 setTransmission 方法有相同的错误。您正在将参数设置为现有属性的值,而不是相反。不过,您在构造函数和setType 中正确执行了此操作。

    public void setPowertrain(String powertrain){
        // powertrain = this.powertrainVehicle;
        this.powertrainVehicle = powertrain;
    }
    
    public void setTransmission(String transmission){
        // transmission = this.transmissionVehicle;
        this.transmissionVehicle = transmission;
    }
    

    每个人有时都会错过一些事情,这就是为什么拥有第二双眼睛在代码上如此出色的原因。甚至还有一个“rubber ducking”的半官方想法,人们在办公桌上放着橡皮鸭之类的东西。然后,每当他们遇到问题时,他们就会开始向鸭子解释,就好像他们在向其他人展示问题一样。这有助于让您的大脑进入一种不同的模式,并且您有望以一种全新的眼光来看待您的问题/问题/错误/障碍/任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多