2017-12-29 37 views
0

New to Java私はオブジェクトとクラスを操作する方法を考え出しています。下記の例では、いくつかのドライバーが追跡されているかもしれない/別のドライバーが続いているカーレースを作成しようとしています。特に、私は2番目のコンストラクタを適切に使用したかどうかを理解するのに苦労しています。コンストラクタからインスタンスオブジェクトを取得する方法は?

public class CarDriver { 
// Here I define some features of that class 
private String name; 
private int age; 
// Here I create the first constructor 
public CarDriver(String name, int age){ 
    this.age = age; 
    this.name = name; 
} 
    // Here I create the second constructor, where I try to use an instance of CarDriver to involve a tracker later on. 
public CarDriver(String name, int age, CarDriver tracker){ 
    tracker = new CarDriver(name,age); 
    this.name = name; 
    this.age = age; 
} 

public String getName(){ 
    return this.name; 
} 
public int getAge(){ 
    return this.age; 
} 


// Issues starting here. Since I dont know how to extract the information about the tracker 
public getTracker(){ 
    return tracker 
} 
// Basically I would need that information to figure out whether some drivers are beeing pursued by others. 
public boolean hasPursuer(CarDriver driver) 
{ 
    if (driver.getTracker() == 0){ 
     return true 
    } else { 
     return false 
    } 
} 

public static void main(String[] args) { 
    CarDriver driver1 = new CarDriver("Hamilton", 25); 
    CarDriver driver2 = new CarDriver("Schumacher", 23, driver1); 
    CarDriver driver3 = new CarDriver("Rosberg", 27, driver2); 
    CarDriver driver4 = new CarDriver("Susi", 27, driver3); 

    System.out.println(driver1.hasPursuer() + " " + driver2.hasPursuer()); 
    } 
} 
+2

いいえ、正しく使用していません。 'tracker'として渡された値を直ちに上書きし、その上書きされた値で何もしません。あなたが何をしようとしているのかは不明です。 –

+0

質問をお書きください。これはチャットではありません。また、達成しようとしていることと問題がどこにあるのかを述べる必要があります。 – Palo

+0

こんにちは@Palo私は2番目のコンストラクタを適切に使用しているかどうかを理解するのに苦労しています - >理解するのに苦労しているImは、2番目のコンストラクタを適切に使用しましたか?今すぐ疑問符で? – Googme

答えて

2

を使用することができますここで修正されたコードだtrackerを扱うことができ、説明はしていますコメント:

public class CarDriver { 

    private String name; 
    private int age; 

    // You need to store the tracker as a field! 
    private CarDriver tracker; 

    public CarDriver(String name, int age){ 
     this.age = age; 
     this.name = name; 
    } 

    public CarDriver(String name, int age, CarDriver tracker){ 
     this.name = name; 
     this.age = age; 
     // the above two lines can be simplfied to: 
     // this(name, age); 

     // assign the tracker passed in to the field 
     this.tracker = tracker; 
    } 

    public String getName(){ 
     return this.name; 
    } 
    public int getAge(){ 
     return this.age; 
    } 

    // Use CarDriver as the return type 
    public CarDriver getTracker(){ 
     return tracker; 
    } 

    // I have edited this method slightly because it doesn't really makes sense 
    // to do something like "driver.hasPursuer(driver)". It makes much more 
    // sense to do "driver.hasPursuer()" 
    public boolean hasPursuer() 
    { 
     // you don't actually need an if statement here. "!=" already evaluates to a boolean 
     // also note that when there is no pursuers, the value is "null", not "0" 
     return getTracker() != null; 
    } 

    public static void main(String[] args) { 
     CarDriver driver1 = new CarDriver("Hamilton", 25); 
     CarDriver driver2 = new CarDriver("Schumacher", 23, driver1); 
     CarDriver driver3 = new CarDriver("Rosberg", 27, driver2); 
     CarDriver driver4 = new CarDriver("Susi", 27, driver3); 

     System.out.println(driver1.hasPursuer() + " " + driver2.hasPursuer()); 
    } 

} 

あなたが持っている誤解は、どのクラスも "タイプ" であることを認識していない。。変数の型やメソッドの戻り値の型としては、どんなクラスでも使用できます。

+0

スーパーウェルについて説明しました。ありがとうございました! – Googme

0

あなたはtrackerの参照を格納nameageと同じように、あなたがCarDriverクラスで

private CarDriver tracker; 
public CarDriver(String name, int age, CarDriver tracker){ 
    this.tracker = tracker; 
    this.name = name; 
    this.age = age; 
} 

public CarDriver getTracker(){ 
    return tracker; 
} 
+0

あなたの答えをありがとう。私は最初にそれを試みました。しかし、 'Can not resove symbol tracker'が返されました – Googme

+0

' CarDriver'クラスのメンバ変数 'tracker'を宣言するのを忘れたので、そのエラーが発生する可能性が最も高いです。 – mckuok

関連する問題