2017-11-25 2 views
1

현재 게임에서 모든 키를 수집했는지, 모든 상사를 죽였는 지 등의 질문을합니다. 하지만 결말에 가까워지면 " 어떤 키를 사용 하시겠습니까? " 그것은 그 벌금을 수행하지만 문 섹션에 도착하면, 실제로 키 값을 얻을하지 않습니다, 그냥텍스트 기반 게임 만들기와 나는 붙어 있어요

public static int possibleKey() 
{    
    SetnGet sng = new SetnGet(); 
    int keys; 
    do 
    { 
     System.out.println("Which key would you like to use?"); 
     keys = in.nextInt(); 
     } 
    while(keys != 1 && keys != 2 && keys != 3); 

    return keys; 
} 

public static int possibleLevel() 
{ 
    SetnGet sng = new SetnGet(); 
    System.out.println("Which door would you like to enter? - 1, 2, 3 or 4"); 
    int level; 

    if(sng.accessibleKey() == 3) 
    { 
     do 
     { 
      System.out.println("You have all three keys, you have complete access"); 
      level = in.nextInt(); 
     } 
     while(level != 1 && level != 2 && level != 3); 
    } 
    else 
    { 
     do 
     { 
      System.out.println("You have no level access"); 
      level = in.nextInt(); 
     } 
     while(level != 1 && level != 2 && level != 3 && level != 4); 

    } 
    return level; 
} 

세트 코드 0

홈페이지 조각을 출력하고,에서 얻을 SetnGet 클래스

private int possibleKey; 
private int possibleLevel; 

public int setPossibleKey() 
{ 
    return possibleKey; 
} 

public void setPossibleKey(int possibleKey) 
{ 
    this.possibleKey = possibleKey; 
} 

public int getPossibleLevel() 
{ 
    return possibleLevel; 
} 

public void setPossibleLevel(int possibleLevel) 
{ 
    this.possibleLevel = possibleLevel; 
} 
+0

IDE 디버거의 코드를 단계별로 살펴 보겠습니다. 뭘 찾았 니? –

+0

IDE 디버거를 실행할 때마다 매번 데이터 비트를 테스트한다는 것을 알았습니다. 그것은 sng.accessibleKey에서 System.out.println으로 이동합니다 ("레벨 액세스 권한 없음"). – Questionable

답변

3

방법 possibleLevel() 바로 그 후에 SetnGet 클래스 (SetnGet sng = new SetnGet();)과의 인스턴스를 생성 인스턴스 (sng.accessibleKey()) int 타입의 필드를 판독한다. 이 값은 int 클래스 필드의 기본값이므로 입력란에 다른 값을 설정하지 않으므로 이러한 결과는 물론 0입니다. 결과적으로 항상 else으로 이동하고 "액세스 할 수 없음"메시지가 표시됩니다.

public class Main { 

    private static Scanner in = new Scanner(System.in); 

    private static SetnGet sng = new SetnGet(); 

    public static void main(String[] args) { 
     int selectedKey = possibleKey(); 
     sng.accessibleKey(selectedKey); 
     int level = possibleLevel(); 
    } 

    public static int possibleKey() { 
     // your initial implementation of the method 
    } 

    public static int possibleLevel() { 
     // your initial implementation of the method, but 
     // without the "SetnGet sng = new SetnGet();" line 
    } 
} 

: 당신이 문제를 해결하기 위해 무엇을 할 수 있는지

이 뭔가를 클래스에 possibleLevel()에서 SetnGet sng = new SetnGet();를 이동 한 후 possibleKey() 호출의 결과가이 설정되어 있는지 확인하는 것입니다 SetnGet 클래스는 다음과 같습니다

class SetnGet { 

    private int accessibleKey; 

    int accessibleKey() { 
     return accessibleKey; 
    } 

    void accessibleKey(int accessibleKey) { 
     this.accessibleKey = accessibleKey; 
    } 
} 

이 초기 문제가 해결됩니다. 그런 다음 코드의 추가 리팩토링을 고려할 수 있습니다. 예를 들어, 공유 클래스 필드 대신 메서드 인수를 사용하여 메서드간에 데이터를 전달하고 possibleKey() 메서드의 중복 SetnGet sng = new SetnGet(); 줄을 제거하는 등의 작업을 수행 할 수 있습니다.

관련 문제