2017-12-29 46 views
0

New to Java 내가 객체와 클래스로 작업하는 방법을 알아 냈다. 아래의 예에서는 자동차 경주를 만들려고합니다. 일부 자동차 운전사가 추적되거나 다른 운전자가 따라 다니는 자동차 경주를 만들려고합니다. 특히 임씨는 두 번째 생성자를 적절하게 사용했는지 이해하려고 애 쓰고 있습니다.생성자에서 인스턴스 객체를 얻는 방법은 무엇입니까?

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

안녕하세요 @ 팔로 임 내가 두 번째 생성자를 적절하게 사용했는지 이해하려고 애 쓰고 있습니다.> 이해하려고 애쓰는 임씨는 두 번째 생성자를 적절하게 사용 했습니까? 더 나은 물음표로 지금? – Googme

답변

2

에서 사용할 수 tracker 당신이 tracker의 참조를 저장 nameage, 같은 방식으로 처리 할 수는 수정 된 코드입니다, 설명이에 의견 :

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

당신은 그래서 당신이 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

답변 해 주셔서 감사합니다. 나는 처음부터 그것을 시도했다. 그러나'심볼 트랙커를 다시 시작할 수 없습니다 '가 반환되었습니다 – Googme

+0

'CarDriver' 클래스에 멤버 변수'tracker'를 선언하는 것을 잊었 기 때문에 그 오류가 발생할 가능성이 큽니다. – mckuok

관련 문제