2013-06-18 4 views
0

지뢰 찾기 게임을 쓰고 있는데 해시 세트를 사용하려고합니다. 제 질문은 해시 세트가 정수와 문자열을 모두 포함 할 수 있습니까? 내가 사용하고있는 하비 세트는 주로 문자열과 하나의 정수를 가지고 있습니다. 이 작업을 수행 할 수 있습니까? 컴파일 할 때 _minecount 변수를 찾을 수 없다는 오류를 표시합니다. 문자열이 아니어야합니다.지뢰 찾기 해시

private static final String[] VALID_SHOWN_TEXT = {"X", 0 < minecount && _minecount < 8, " ", "F", "?"}; 

몇 가지 문제가

import java.util.Set; 
import java.util.HashSet; 

/** 
* Represents a single square in Minesweeper. 
* 
* @author Sophia Ali 
*/ 
public class MineSquare 
{ 
    //Constants: 
    // Fields: 
    private String _shown;  // What a square is showing now 
    private boolean _mined;  // Square is mined or not 
    private boolean _flagged; // Square is flagged or not 
    private boolean _questioned; // Square is question marked or not 
    private int  _minecount; // Square's surrounding mine count 
    private boolean _opened;  // Player has opened this square or not 
    private static final String[] VALID_SHOWN_TEXT = {"X", 0 < minecount && _minecount < 8, " ", "F", "?"}; 
    private HashSet<String> validShownTextSet = 
    new HashSet<String>(java.util.Arrays.asList(VALID_SHOWN_TEXT)); 

    // Constructors & Methods: 

    /** 
    * Default constructor 
    * Sets _mined and _opened to false. 
    */ 
    public MineSquare() 
    { 
     _mined = false; 
     _opened = false; 
     setShown(" "); 
    } 





    /** 
    * Returns flagged status of square. 
    * @return _flagged Flagged status 
    */ 
    public boolean isFlagged() { 
     return _flagged; 
    } 





    /** 
    * Sets or unsets flag on a square. 
    * @param flagged True or false (square is flagged or not) 
    */ 
    public void setFlagged(boolean flagged, boolean opened) { 
     _flagged = flagged; 
     _opened = opened; 

     // If Minesquare opened do nothing: 
     if (opened == true) 
     setShown(" "); 

     // If flagged, square should show "F": 
     if (isFlagged() == true) 
      setShown("F"); 
     else 
      setShown(" ");    
    } 


    public int getMinecount() { 
     return _minecount; 
    } 





    public void setMinecount(int minecount) { 
     _minecount = minecount; 

     if (0 < minecount && minecount < 8) 
     { 
     setShown("Error:" + minecount); 

    } 
} 





    public boolean isMined() { 
     return _mined; 
    } 





    public void setMined(boolean mined) { 
     _mined = mined; 


    } 





    public boolean isOpened() { 
     return _opened; 
    } 





    /** 
    * Open a square. 
    * (Once opened, a square can't be unopened.) 
    */ 
    public void setOpened() { 
     _opened = true; 

     if (isMined() == true) 
      setShown("X"); 
     else if (getMinecount() > 0) 
      setShown(_minecount + ""); 
     else // blank space for _minecount = 0 
      setShown(" "); 
    } 





    public boolean isQuestioned() { 
     return _questioned; 
    } 





    public void setQuestioned(boolean questioned, boolean opened) { 
     _questioned = questioned; 
     _opened = opened; 
     // If Minesquare opened do nothing: 
     if (opened == true) 
     setShown(" "); 

     // If Questioned, square should show "F": 
     if (isQuestioned() == true) 
      setShown("F"); 
     else 
      setShown(" "); 
    } 





    public String getShown() { 
     return _shown; 
    } 





    public void setShown(String shown) { 
     _shown = shown; 
     /*if (shown.equals("X")) { 
      this.shown = shown; 
     } else if (shown.equals(0 < minecount && minecount < 8)) { 
      this.shown = shown; 
     } else if (shown.equals(" ")) { 
      this.shown = shown; 
     } else if (shown.equals("F")) { 
      this.shown = shown; 
     } else if (shown.equals("?")) { 
      this.shown = shown; 
     } else { 
      this.shown = "Error + shown"; 
     } 
     */ 
     if (validShownTextSet.contains(shown)) { 
      this.shown = shown; 
     } else { 
      this.shown = "Error" + shown; 
     } 
    } 





    } 
+0

'HashSet '을 사용하는 경우에만 '정수'와 '문자열'에 공통된 다른 수퍼 클래스가 없기 때문에. – fge

+0

이 줄은 무엇을할까요? static final String [] VALID_SHOWN_TEXT = { "X", 0

+0

@fge 감사합니다! 하지만 난 여전히 "- 변수를 minecount 기호를 찾을 수 없습니다"라는 오류가 발생합니다. 이 작업은 문자열이 아닌 정수이거나 minecount가 미리 초기화되지 않았기 때문에 수행해야합니까? –

답변

2

이 줄이 내 코드입니다. 여기에 범위에 minecount 변수가 없습니다. 변수 _minecount은 정적 변수가 아니므로 VALID_SHOWN_TEXT을 정적으로 만들어 정적 범위에서 액세스 할 수 없습니다.

짐작했듯이 0 < minecount && _minecount < 8booleanString 배열로 저장할 수 없습니다. boolean 표현식을 사용할 수 있다고하더라도 String 배열에 저장하려면 String으로 변환해야합니다.

// or a working boolean expression here. 
..., String.valueOf(0 < minecount && _minecount < 8), ... 

HashSet<Object> 정수와 문자열을 모두 포함 할 수 있지만, 당신은 단순히 당신이 HashSet<String>로 변환 할 수 있어야 문자열 배열로 필요로 변환 할 수 있습니다처럼 여기, 그것은 보인다.

+0

String.value 라인을 사용해 보았지만, 여전히 minecount에 대한 에러가 발생했다. 나는 그것을 정적 변수 컨텍스트 오류에서 참조 할 수없는 비 정적 변수를 얻으려고했지만 시도했다. 이 문제를 해결하는 방법을 잘 모르겠습니다. 내가 initailizing 시도 minecount = _minecount 설정 시도; 그러나 같은 오류가 나타납니다. –

관련 문제