2012-10-20 2 views
1

나는 다음 클래스 도시 랜덤 맵 생성게터 세터 자바, 전달 개인 변수

public class City { 

    public static boolean walls[][]; 
    public static int width, height; 
    public static Human people[]; 
    public static ArrayList<Zombie> zombies = new ArrayList<Zombie>(); 

에게 (벽 사람들이 도시에 채워집니다 한 좀비가 도시에서 만든, 건물을 정의하는 역할)이있다. 휴먼 클래스와 좀비 클래스도 있습니다.

public class Human { 
int x; 
int y; 
int d; 

public Human(int x, int y, int d) 
{ 
    this.x = x; 
    this.y = y; 
    this.d = d; 
} 

Zombie와 Human 모두 맵 주위의 움직임을 결정하는 논리가 있습니다. 따라서 도시의 벽, 사람 및 좀비에 액세스해야 액세스 할 수 있습니다. 이 프로그램은 정적 인 상태에서 정상적으로 실행되지만 프로그램을 재설정 할 때마다 새로운 도시를 만들 때마다 정지되고 정적 변수로 인해 가정합니다. 나는 그것들을 비공개로 만들고,시에서 getter와 setter 메소드를 생성하고 Human and Zombie로부터 호출하는 방법을 시도했지만, 정적이 아닌 메소드를 정적 인 방법으로 호출 할 수 없다고 항상 말합니다. 예는 다음과 같습니다

public int peopleLength(){ //in City 
    return people.length; 
} 

City.peopleLength() //in Human 

날 내가 잘못 알고 또는 저에게 올바른 방향으로 푸시을 제공 할 수 있을까요? 미리 감사드립니다.

편집 :

if(StdDraw.isKeyPressed(32)){ 
world = new City(MAX_X,MAX_Y,80, 400); 
} 

스페이스 바를 누르면 때,지도가 지워지고 다시 그려

. 때로는 2 ~ 3 번 작동하지만 대부분 검은 색 화면으로 바뀌고 아무 것도 표시하지 않습니다.

+0

"그것이 얼어 버린다"는 것은 정확히 어떤 일이 일어 났는지에 대한 명확한 설명이 아닙니다. 변수를 정적으로 유지하는 것은 나쁜 생각입니다. (여러분이 만드는'City '의 인스턴스가 얼마나 많은지는 중요하지 않습니다.)하지만 아무것도 고정시키지 않아야합니다. –

+1

이 기본 언어 구성 요소를 이해하기 위해 Oracle Java 자습서부터 시작하는 것이 좋습니다. 여기에'static' 필드를 사용하는 이유가 정확히 무엇인지 생각할 수 있습니다. –

답변

1

다음 중 하나를

  • 는 비 정적 및 민간 변수가 다음, 그들을 위해 getter와 setter 메소드를 추가 확인 또는
  • 는 해당 변수를 재설정 도시라는 리셋()에 정적 메서드를 추가 자신의 초기 상태

첫 번째 경로로 이동합니다.

0

새 키워드를 사용하여 City의 인스턴스를 만듭니다.

City gotham = new City(); 

그런 다음 gotham 개체를 비 정적 환경에서 참조 할 수 있습니다.