web-dev-qa-db-ja.com

Javaでコンストラクターにユーザー入力を入力するにはどうすればよいですか?

私は課題の壁にぶつかり、何か役立つものを求めてサイトを調べてきました(空になりました)。クラス、そのクラス内のコンストラクター、そしてスーパークラスを拡張するためのサブクラスを作成する必要があります。次に、両方のケースを示すために、mainメソッドを使用して新しいファイルを作成する必要があります。概念的には問題ありません。

私の質問はこれです:コンストラクターを使用して、ただしユーザー入力を使用してオブジェクトを初期化するにはどうすればよいですか?

現在、発生しているエラーは次のとおりです。「クラスCarRentalのコンストラクターCarRentalは、指定された型に適用できません。必須:String、int、String、intが見つかりました:引数がありません理由:実際の引数リストと正式な引数リストの長さが異なります」

「エラーは問題が何であるかを教えてくれます」というコメントを無視しないでください。いいえ、それはmeそれが何であるかを教えてくれません。私はこのようなものの小さなベイビーであり、少し手を握る必要があります。

以下に3つのクラスを貼り付けます。私はそのような初心者なので、彼らはおそらくあなたを苦しめるでしょう(また、私のクラスは、擬似コードに専念する時間がほとんどない、短縮された8週間のコースなので、ロジック自体を考えるという追加の課題があります)。

私は宿題をしてくれる人を探していません。UseCarRental.Javaファイルで助けを求めているだけです。これが私のコードです。

public class CarRental {
protected String renterName;
protected int zipCode;
protected String carSize;
protected double dailyRate;
protected int rentalDays;
protected double totalCost;
final double ECONOMY = 29.99;
final double MIDSIZE = 38.99;
final double FULLSIZE = 43.50;

public CarRental(String renterName, int zipCode, String carSize, int rentalDays){

totalCost = dailyRate * rentalDays;
}
public String getRenterName(){
return renterName;
}
public void setRenterName(String renter){
renterName = renter;
}
public int getZipCode(){
return zipCode;
}
public void setZipCode(int Zip){
zipCode = Zip;
}
public String getCarSize(){
return carSize;
}
public void setCarSize(String size){
carSize = size;
}
public double getDailyRate(){
return dailyRate;
}
public void setDailyRate(double rate){
switch (getCarSize()) {
        case "e":
            rate = ECONOMY;
            break;
        case "m":
            rate = MIDSIZE;
            break;
        case "f":
            rate = FULLSIZE;
            break;
    }
}
public int getRentalDays(){
return rentalDays;
}
public void setRentalDays(int days){
rentalDays = days;
}
public double getTotalCost(){
return totalCost;
}
public void setTotalCost(double cost){
totalCost = cost;
}

public void displayRental(){
System.out.println("==============================================");
System.out.println("Renter Name: " + getRenterName());
System.out.println("Renter Zip Code: " + getZipCode());
System.out.println("Car size: " + getCarSize());
System.out.println("Daily rental cost: $" + getDailyRate());
System.out.println("Number of days: " + getRentalDays());
System.out.println("Total cost: $" + getTotalCost());

}

}

サブクラスLuxuryCarRental..。

public class LuxuryCarRental extends CarRental {

final double chauffeur = 200.00;
final double dailyRate = 79.99;
protected String chauffeurStatus;

public LuxuryCarRental(String renterName, int zipCode, String carSize, int rentalDays) {
    super(renterName, zipCode, carSize, rentalDays);
}

public String getChauffeurStatus(){
return chauffeurStatus;
}
public void setChauffeurStatus(String driver){
chauffeurStatus = driver;
}
public double getChauffeurFee(){
return chauffeur;
}
public void setTotalLuxuryCost(){
if (chauffeurStatus=="y")
    setTotalCost((dailyRate * getRentalDays()) + (chauffeur * getRentalDays()));
else
    setTotalCost(dailyRate * getRentalDays());
}

@Override
public void displayRental(){
System.out.println("==============================================");
System.out.println("Renter Name: " + getRenterName());
System.out.println("Renter Zip Code: " + getZipCode());
System.out.println("Car size: " + getCarSize());
System.out.println("Optional Chauffeur fee: $" + getChauffeurFee());
System.out.println("Daily rental cost: $" + getDailyRate());
System.out.println("Number of days: " + getRentalDays());
System.out.println("Total cost: $" + getTotalCost());

}
}

そして今、mainメソッドを持つクラス:

import Java.util.Scanner;
public class UseRentalCar {

public static void main(String[] args){
    Scanner keyboard = new Scanner(System.in);
    CarRental rentalCar = new CarRental();

    System.out.println("==========================");
    System.out.println("RENTAL CAR SELECTION");
    System.out.println("==========================");
    System.out.println("Enter your name: ");
    rentalCar.setRenterName(keyboard.next());
    System.out.println("Enter your Zip code: ");
    rentalCar.setZipCode(keyboard.nextInt());
    System.out.println("Enter the car size ("e=Economy, m=Midsize, f=Fullsize: ");
    rentalCar.setCarSize(keyboard.next());
    System.out.println("Enter the number of days: ");
    rentalCar.setRentalDays(keyboard.nextInt());

    rentalCar.displayRental();



}
}

(主にオブジェクトのインスタンス化を機能させようとして、問題にならない理由をいくつか省略しました)

助けてくれてありがとう!

6
auslander

Mainメソッドでローカル変数(String変数やint変数など)を作成し、これらの変数にユーザー入力を入力したら、それらを使用してコンストラクターを呼び出します。

一般的な例を投稿します。これは宿題なので、概念を示してから、yo概念を使用してコードを作成することをお勧めします。

public class Foo {
  private String name;
  private int value;

  public Foo(String name, int value) {
    this.name = name;
    this.value = value;
  }
}

他の場所

import Java.util.Scanner;

public class Bar {

  public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Please enter name: ");
    String name = keyboard.nextLine();  // local variable
    System.out.print("Please enter value: " );
    int number = keyboard.nextint();  // another local variable
    keyboard.nextLine();  // to handle the end of line characters

    // use local variables in constructor call
    Foo foo = new Foo(name, number);    
}

コンパイラーは、CarRentalコンストラクターに4つのパラメーター(String、int、String、および別のint)が必要であると不平を言っています。

"クラスCarRentalのコンストラクタCarRentalは、指定された型に適用できません;必須:String、int、String、intが見つかりました:引数なし理由:実際の正式な引数リストの長さが異なります」

しかし、UseRentalCarでは、何も合格していません。

CarRental rentalCar = new CarRental();

"クラスCarRentalのコンストラクタCarRentalは、指定された型に適用できません。必須:String、int、String、intfound:引数なし理由:実際の正式な引数リストの長さが異なります」

クラスにコンストラクターを指定しない場合、Javaは引数なしのコンストラクターを作成します。独自のコンストラクター(CarRentalで4つのパラメーターを使用して行ったもの)を提供する場合、Javaは引数のないコンストラクターを作成しないため、参照できません。詳細については、 http://docs.Oracle.com/javase/tutorial/Java/javaOO/constructors.html を参照してください。

Javaが自動的に追加しなかったため、引数なしのコンストラクターを自分で追加できます。または、レンタカークラスにセッターを提供しているので、現在のようなセッターを使用して、CarRental(およびLuxuryCarRental)の4引数コンストラクターを削除し、Javaにデフォルトのコンストラクターを追加させることができます。

または、何らかの理由でこれらのコンストラクターを保持する場合は、ユーザー入力をローカル変数に保存し、すべてのユーザー入力が完了するまで4引数コンストラクターの呼び出しを延期することができます。

7
lreeder

「私の質問はこれです。コンストラクターを使用して、ユーザー入力を使用してオブジェクトを初期化するにはどうすればよいですか?」

役立つかもしれないいくつかの疑似っぽいコード

main{
Scanner input = new Scanner(system.in);

int x = input.nextInt();

yourClass myClass = new yourClass(x);  //passes x into the constructor

}//end main

yourClass
{
int data;

 public yourClass(int i)
{
data = x:
}
1
switchride