2013-03-31 1 views
1

이것은 이상한 일종입니다. 필자가 작성한 코드는 특정 단어 게임 용이므로 매우 전문적입니다.자바 : 사전에서 임의로 선택한 특정 4 글자 단어를 체계적으로 무시합니까?

런타임에 4036 개의 인덱싱 된 4 문자 단어가 포함 된 HashMap<Integer, String>이 있습니다. 같은 클래스에서, 나는 또한 random()이라는 방법을 가지고 있습니다.이 단어는 무작위로 HashMap에서 단어를 선택할 것입니다. 이것은 플레이어가 시작하는 단어입니다. 그러면 그 또는 그녀는 새롭고 유효한 단어를 만들기 위해 한 번에 한 글자 씩 단어를 바꿀 것입니다. 예컨대, FIVE ->FIRE ->WIRE ->WISE ->WISH ->. 분명히, 나는 플레이어를 시작하기 위해 선택한 첫 번째 단어가 변경되지 않도록 (즉, 한 글자를 변경하는 단어가 없음) 원하지 않습니다.

그래서 무작위로 선택한 단어가이 기준을 충족하는지 확인하는 다른 방법이 필요합니다. 4036 개의 모든 항목을 반복해야 할 것 같아요. 그 정도로는 쉽지만, 무작위로 선택한 단어에서 정확히 1 문자 밖에없는 단어가 있는지 어떻게 확인할 수 있습니까?

+2

단어를 그룹 (예 : 그룹 FI? E)에 저장할 수도 있습니다. 'FIVE'와'FIRE'를 포함합니다. 예를 들어, 키가'FI? E'이고 그 그룹의 모든 항목을 나열하는'Map >'에 저장할 수 있습니다. 무작위로 단어를 선택하고 'FIVE'라고 말하면 가능한 그룹 '? IVE','F? VE', 'FI? E', FIV?가 하나 이상의 단어를 포함하고 있는지 확인할 수 있습니다. 이 경우'FI? E' 그룹에는 둘 이상의 단어가 들어 있습니다 (FIRE도 있습니다). 그래서 사용할 수 있습니다. – assylias

+0

그것은 또한 내가 생각하지 못한 매우 똑똑한 해결책입니다. 감사! –

답변

2

두 단어를 모두 가져 와서 letter-for-letter를 비교하십시오. 동일한 문자가 같은 위치에 있어야하기 때문에 4 개 이하의 문자 만 검사하는 단일 루프 만 있으면됩니다. 차이가있을 때마다 카운터를 늘립니다. 카운터가 2에 도달하면 단어가 둘 이상의 위치에서 달라집니다. 4자를 통과하는 루프가 끝나고 카운터가 1이되면 정확하게 한 위치에서 다른 두 단어가 있습니다.

boolean differByOne(String w1, String w2) { 
    int count = 0; 
    for (int i = 0 ; i != 4 ; i++) { 
     if (w1.charAt(i) != w2.charAt(i)) count++; 
     if (count > 1) return false; 
    } 
    return count == 1; 
} 
+0

다시 바보 같은 느낌. 그 일은 내 질문을 쓰는 동안, 과정을 이해하는 것과 같은 일을 발굴에서 시작했다. 하하! 무리 감사! –

관련 문제