0

ここで作成したこの小さなメソッドは、正しいコスト値を返しません。if ステートメントの使い方が間違っているのではないかと思います。私はJavaが初めてなので、文字列を含むifステートメントを使用するのはこれが初めてです。私には本も先生もありません。ただ独学で学んでいます。どんな助けでも大歓迎です。

編集:コード全体を投稿

import java.util.*;

public class 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、「ミッドサイズ」、「フルサイズ」、または「エコノミー」ではないということです。これを修正する簡単な方法の 1 つは、次の行を関数の先頭に追加することです。cost = 9001;//or whatever number you want

于 2013-09-28T23:10:46.127 に答える
0

が であると仮定するsizeString、あなたは正しい道を進んでいます。String.equalsIgnoreCase(String)大文字/小文字を考慮せずに文字列を比較するために使用することもできます。

関数内でsizeは未定義であり、考慮するには関数属性に渡す必要があることに注意してください

double getCost(String size)

それとは別に、あなたは正しい道を歩んでいます。

于 2013-09-28T23:12:20.123 に答える
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;
}

あなたの場合、それは問題ではありませんが、より効率的で(作業がほとんどない)、さらに重要なことに、1つのブランチのみが実行されることを保証できるため、通常は良い習慣です。これは、ブランチ内のコードが後の条件式の値を変更します。

とにかく、あなたのコードにはもっと深刻な問題があります:getCostコストを返すだけでなく、コストも設定します! displayが正しく機能するためには、 をのgetCost前に呼び出す必要があるため、これは大きな問題ですdisplay。これは非常に奇妙な動作であり、文書化しても混乱を招き、バグを排除します。

costあなたがすべきことは、変数を完全に取り除くことです。を直接display使用する代わりに、コストの計算に使用する必要があります。costgetCost

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

サイズとコストがこのメソッドを含むクラスのインスタンス変数であるかどうかによって異なります。そうでない場合、このコードはコンパイルさえされないと思います。その場合、問題はおそらくサイズ文字列が「経済」と等しくないという事実にあります。 、「中型」または「フルサイズ」。

考慮すべきことの1つは、サイズを列挙型にして、有効な値のみに制限することです

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 に答える