2017-11-20 6 views
0

문제점이 있습니다. 여러 가지 방법으로 작동 시키려고 시도했지만 올바르게 처리하지 못했습니다. 예제와 같이이 클래스 구조 여야합니다. 문제에 관해서. 나는 메인 클래스에Java, 메소드를 통해 주 값이 변경됨,이 값을 다른 클래스에 올바르게 전달하는 방법

public class MainClass { 

    public static void main(String[] args) { 
     Moving moving = new Moving(); 
     moving.forward(); 
     moving.forward(); 
     System.out.println(moving.move.y); //prints 10; 
     moving.status(); //prints 0; I need it to print 10 too; 

    } 
} 

홈페이지에서 내 인스턴스가 이동되는 클래스 객체를 메서드를 호출하고 있습니다 :

수준의 이동에 매개 변수를 전달
public class Moving { 
    Move move = new Move(); 
    Status status = new Status(); 

    public void forward() { 
     this.move.moving(5); 

    } 

    public void backwards() { 
     this.move.moving((-5)); 

    } 

    public void status() { 
     status.getStatus(); 

    } 

} 

:

public class Move { 

    int y; 
    String forward = "forward"; 
    String back = "back"; 

    public void moving(int howMuch) { 
     y+=howMuch; 

    }public int getY() { 
    return this.y; 


} 

} 

그리고 마지막으로 클래스를 가진다을 Main()에서 forward() 또는 backwards 메소드를 호출 할 때 변경되는 인쇄 정보 (int y 값).

public class Status { 
    Move move = new Move(); 
    int y; 

    public void setStatus(Move move) { 
     this.y = move.getY(); 
    } 

    public void getStatus() { 
     System.out.println(this.y); 

    } 
} 

그리고 여기에서 임씨는 제대로 작동하지 않으려 고합니다. 일단 내가 int y를 static int y로 바꿨을 때 나는 어떻게 든 succeded했다. ,하지만 정적이 아닌, 나는 그것을 작동하게하지 않습니다.

+1

두 클래스를 인스턴스화하는 하나의 클래스가 있는데, 둘 다 y 위치의 정보를 보유하고 있습니까? 미안하지만, 이것은 극도로 나쁜 디자인처럼 보입니다. 그리고 실제로 당신이 성취하려는 것을 이해하지 못하기 때문에 좋은 대답을하는 것이 꽤 어렵습니다. – klutt

+0

그게 더 큰 것의 일부이고, 나는 그 수업이 필요해. 또한 하나 또는 소수의 클래스가 아닌 여러 클래스로 작동하는 법을 배우는 학습 목적입니다. Move 클래스에서 값을 가져야하는 Status 클래스의 main 메서드에서 변수 int y를 출력해야합니다. –

+0

Status에'y'를 넣으면 안됩니다. 'Move' 객체를'Status' 생성자에게 건네 주면 또 다른 Move in Status를 생성하는 대신 그 객체에 대한 참조를 유지합니다. 'getStatus' 메쏘드는'move.y'를 사용해야합니다. – DodgyCodeException

답변

0

moving.status()은 Status 클래스에 y 속성 값을 설정하거나 업데이트하지 않아서 0을 출력합니다.

변경 주요 방법 :이 수행하는 여러 옵션을 가지고

public static void main(String[] args) { 
     Moving moving = new Moving(); 
     moving.forward(); 
     moving.forward(); 
     System.out.println(moving.move.y); //prints 10; 
     moving.status.setStatus(moving.move); 
     moving.status(); //prints 0; I need it to print 10 too; 
} 

또는 이동 수업) 방법을 상태를 (변경 :

public void status() { 
    status.setStatus(move); 
    status.getStatus(); 
} 

또는 변경 상태 클래스의 구조 :

public class Status { 
    Move move; 

    public Status(Move move) { 
     this.move = move; 
    } 

    public void getStatus() { 
     System.out.println(move.y); 
    } 
} 

개인적으로 @DodgyCodeException 제안대로 개인적으로 마지막 옵션을 선택합니다. 이 선택의 이유는 상태가 클래스 목적을 식별하지 못하는 속성을 보유해서는 안된다는 사실입니다. 예를 들어 Car 클래스와 Garage 클래스가 있다고 상상해보십시오. 자동차의 특성이기 때문에 Garage의 속성으로 carColor을 입력하는 것은별로 의미가 없습니다. 차고에는 int numberOfCars 또는 Car[] cars과 같은 속성이 있어야합니다.

마지막 옵션을 선택하는 경우 이동 클래스에서 Status status = new Status();Status status = new Status(move);으로 바꾸는 것을 잊지 마세요.