0

我在这里做的这个小方法没有返回正确的成本值。我想知道我是否错误地使用了 if 语句。由于我是 Java 新手,因此这是我第一次使用包含字符串的 if 语句。我没有书,也没有老师,只是自学。任何帮助将非常感激。

编辑:发布整个代码

导入 java.util.*;

公共类 UseCarRental {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Thank you for choosing ICT car Rentals\n"
            + "Pleae enter your full name:");
    String renterName = input.nextLine();
    System.out.println("Please enter your zip code:");
    int renterZipcode = input.nextInt();
    input.nextLine();
    System.out.println("Please enter the size car you would like:\n"
            + "economy\n"
            + "midsize\n"
            + "fullsize\n"
            + "luxury?");
    String carSize = input.next();
    System.out.println("How many days do you wish to rent this?");
    int rentalDays = input.nextInt();

    if (carSize.equals("luxury")) {
        System.out.println("Will you be wanting a chauffer (y or n");
        String chauffer = input.next();
        LuxuryCarRental rentIt = new LuxuryCarRental(renterName, 
        renterZipcode, carSize, rentalDays,chauffer);
        rentIt.display();
    } else {
        CarRental rentIt = new CarRental(renterName, renterZipcode, 
        carSize, rentalDays);
        rentIt.display();
    }




} //  end main method

} //结束类 UseCarRental

租车类{

private int days;
private int zip;
private double cost;
private String size;
private double total;
private String name;

    CarRental(String renterName, int renterZipcode, String carSize, int rentalDays){
        this.days = rentalDays;
        this.zip = renterZipcode;
        this.name = renterName;
        this.size = carSize;
    }

    double getCost(){
        if(size.equals("economy")){
            cost = 29.99;
        }
        if(size.equals("midsize")){
            cost = 38.99;
        }
        if(size.equals("fullsize")){
            cost = 43.50;
        }
        return cost;
    } 

    void display(){
        System.out.println("Thank you for using our service.");
        System.out.println("Your order is as follows:");
        System.out.println("Name: " + name);
        System.out.println("Zip code: " + zip);
        System.out.println("Car size: " + size);
        System.out.println("Cost per day: " + cost);
        System.out.println("Days requested: " + days);
        total = days * cost;
        System.out.println("Total cost: " + total);
        System.out.println("If any of the above information is incorrect, too bad bud, because it isn't.");
    }

}

类 LuxuryCarRental 扩展 CarRental {

private int chauffer = 200;
private int days;
private int zip;
private double cost;
private String size;
private double total;
private String name;

LuxuryCarRental(String renterName, int renterZipcode, String carSize, int rentalDays, String chauffer){
    super(renterName, renterZipcode, carSize, rentalDays);
    this.days = rentalDays;
    this.zip = renterZipcode;
    this.name = renterName;
    this.size = carSize;
}

@Override
void display(){
        System.out.println("Thank you for using our service.");
        System.out.println("Your order is as follows:");
        System.out.println("Name: " + name);
        System.out.println("Zip code: " + zip);
        System.out.println("Car size: Luxury");
        System.out.println("Cost per day: " + cost);
        System.out.println("Days requested: " + days);
        System.out.println("Chauffer cost: " + chauffer);
        total = days * cost + chauffer;
        System.out.println("Total cost: " + total);
        System.out.println("If any of the above information is incorrect, too bad bud, because it isn't.");
    }

}

4

5 回答 5

0

这里可能发生size的不是“中型”“全尺寸”或“经济”。解决此问题的一种快速方法是将此行添加到函数的开头:cost = 9001;//or whatever number you want

于 2013-09-28T23:10:46.127 回答
0

假设size是 a String,你就在正确的道路上。您也可以使用String.equalsIgnoreCase(String)比较字符串而不考虑大写/小写。

请记住,size您的函数内部未定义,您需要将其传递给要考虑的函数属性

double getCost(String size)

除此之外,您走在正确的道路上。

于 2013-09-28T23:12:20.123 回答
0

如果您的 String carSize = input.next(); 具有“豪华”价值,那么您将无法在 getCost 中获得什么,您将创造一辆豪华汽车

LuxuryCarRental(String renterName, int renterZipcode, String "luxury", int rentalDays, String chauffer){
    super(renterName, renterZipcode, "luxury", rentalDays);

……

double getCost(){
    if(size.equals("economy")){
        cost = 29.99;
    }
    else if(size.equals("midsize")){
        cost = 38.99;
    }
    else if(size.equals("fullsize")){
        cost = 43.50;
    }
    return cost; //if luxury???
}

也许这会有所帮助:

LuxuryCarRental(String renterName, int renterZipcode, String carSize, int rentalDays, String chauffer){
    super(renterName, renterZipcode, "fullsize", rentalDays);

或者制造豪华车的主要方法传递了另一个论点,或者为豪华增加了另一个价值。或者更好的是,使用 ENUM 这样您就不能传递无效值。

通常,不能保证您传递了有效值。您必须使用 ENUM 处理该验证,或强制用户输入 4 个有效值之一并再次询问他是否提供其他内容...如果案例不重要,则添加忽略大小写“经济”不等于“经济”

最后,

这个

System.out.println("Cost per day: " + cost);

必须是这样的:

System.out.println("Cost per day: " + getCost());

因为您从未在构造函数或其他任何地方设置成本。

于 2013-09-28T23:32:04.997 回答
0

当您有互斥的 if 语句时,您通常希望使用if--链:elseif

double getCost(){
    if(size.equals("economy")){
        cost = 29.99;
    }
    else if(size.equals("midsize")){
        cost = 38.99;
    }
    else if(size.equals("fullsize")){
        cost = 43.50;
    }
    return cost;
}

在您的情况下,这不是问题,但这通常是一种很好的做法,因为它更有效(工作量很少),更重要的是 - 您可以保证只执行一个分支,如果分支内的代码可以更改后面的条件表达式的值。

无论如何,您的代码有一个更严重的问题:getCost不仅返回成本 - 它还设置它!这是一个大问题,因为为了display正常工作,getCost需要调用 before display。这是一个非常奇怪的行为,即使您记录它也会令人困惑和错误修剪。

你应该做的是完全摆脱这个cost变量。display,而不是cost直接使用,应该使用getCost来计算成本:

System.out.println("Cost per day: " + getCost());

至于getCost,而不是设置cost(不再存在)它应该直接返回成本:

double getCost(){
    if(size.equals("economy")){
        return 29.99;
    }
    else if(size.equals("midsize")){
        return 38.99;
    }
    else if(size.equals("fullsize")){
        return 43.50;
    }
    throw new RuntimeException(String.format("'%s' is not a valid size.", size));
}

请注意,在这种情况下,您不需要elses - 但保留它们并没有什么坏处,而且有利于保持一致性。

于 2013-09-28T23:24:14.737 回答
0

这取决于大小和成本是否是包含此方法的类的实例变量,我假设它们是,否则此代码甚至无法编译,在这种情况下,问题可能在于大小字符串不等于“经济” 、“中型”或“全尺寸”。

要考虑的一件事是将 size 设为枚举,从而将其限制为仅有效值

public enum Size {
ECONOMY(29.99), MIDSIZE(38.99), FULLSIZE(43.50);

private double cost;

Size(double cost) {
    this.cost = cost;
}

public double getCost() {
    return cost;
}       

}

或者,如果大小和成本不是您的类的实例变量,您可以编写这样的函数方法

public static double getCost(String size){
    double cost; 
    if(size.equals("economy")){
        cost = 29.99;
    } else if(size.equals("midsize")){
        cost = 38.99;
    } else if(size.equals("fullsize")){
        cost = 43.50;
    }
    return cost;
}

如果我们已经确定它是经济尺寸,请注意使用else if来防止检查全尺寸/中尺寸

于 2013-09-28T23:26:02.093 回答