2017-01-10 6 views
0

작은 텍스트 게임을 만들고 있습니다. 시작 대화는 내 (정적) 방법입니다. 거기에서, 그것은 당신의 선택에 따라 다른 방법으로 당신을 보낸다.정적 및 비 정적 메서드에서 인스턴스를 사용해야합니다.

이제이 작업을 수행하려면 클래스의 인스턴스가 있어야한다고 생각합니다. 예를 들어

:

Program p = new Program(); 

if(stuff){ 
    p.room1(); 
} 
else{ 
    p.room2(); 
} 

그 다른 방법 내에서 변경됩니다 전역 변수가있다.

그래서 주요 방법 위에있다 :

public bool hasItem = false; 

그래서 들어 Booth는() 나는 주요 방법으로 뭔가 위로를 속이고있어 알고

public void room1(){ 
    if(stuff){ 
     p.hasItem = true; 
    } 
} 

처럼 보일 것이다. main 메소드의 내부 또는 외부에 인스턴스 "p"를 선언합니까? 둘 다 시도했지만 두 가지 방법으로 오류가 발생합니다.

편집 : 메인 메서드 외부에서 정적 "프로그램"을 선언하는 결과가 발생했습니다. 도와 주셔서 감사합니다!

+1

나는 귀하의 질문에 전혀 답변하지 않습니다. 문제는 당신이'hasItem'을 선언 할 곳을 모른다는 것입니까? 나는 당신이 * item *을 가진 물건 (room, world, player, 무엇이든)을 나타내는 객체의 멤버 변수로 선언 할 것을 제안한다. –

+0

나는 그것이 방법의 밖에서 그것을 선언함으로써 한 것이라고 생각했습니다. 그렇지 않은가요? – coinbird

답변

2

우선, 메인 메서드 외부에 정적 Program을 만들거나 아키텍처에 따라 메인 메서드 내에 프로그램을 선언 할 수 있습니다.

둘째, 인스턴스 메서드 내에서 인스턴스를 참조 할 필요가 없습니다. 필드 이름을 사용하십시오. 과 같이 : 당신이 그것에 대해 명시 할 경우

public void room1(){ 
    if(stuff){ 
     hasItem = true; 
    } 
} 

당신은 this.hasItem를 사용할 수 있습니다.


또는 더 나은 아직은, 새로운 클래스에 상태를 유지 할 수 있습니다. 어색한 디자인의 주요 방법으로 클래스의 인스턴스 멤버를 가졌어요.

+0

그게 내 문제를 해결했습니다. 고맙습니다! – coinbird