2011-10-16 2 views
1

빙고 게임을 만들고 있습니다. 5x5 그리드의 이미지 버튼이 있으며 각 이미지 뷰에는 자체 텍스트 뷰가 있습니다. 앱을 시작하거나 재설정 할 때 각 텍스트 뷰에 게임 중에 두 번 표시되는 문자열이 하나도없는 임의의 문자열을 표시해야합니다.Android 무작위 반복 문자열

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string-array name="tile_text"> 
    <item>String 1</item> 
    <item>String 2</item> 
    <item>String 3</item> 
    ...all the way to String 127 
</string-array> 
</resources> 

그리고 각 텍스트 뷰에서 임의의 문자열 표시 :

public String[] myString; 

Resources res = getResources(); 
myString = res.getStringArray(R.array.tile_text); 

Random random = new Random(System.currentTimeMillis()); 

int[] textViews = { 

//I have all my textviews added to this array 
}; 

for(int v : textViews) { 
     TextView tv = (TextView)findViewById(v); 

     tv.setText(myString[random.nextInt(myString.length)]);   
} 

아니라 위의 작품을하지만, 심지어 200 개 문자열 저는 현재 127 개 항목, 자원 배열의 문자열을 배열에서 선택할 수 있지만 일부 항목은 여전히 ​​두 번 나타납니다. 배열을 섞어서 하나의 게임에 대해 동일한 문자열을 두 번 선택하지 않을 수있는 방법이 있습니까? 나는 검색을했고 무작위 문자열에 대한 정보를 찾았지만 반복되지 않는 임의 문자열에 대해서는 알지 못한다. 그래서 이것이 중복 된 질문이라면 사과한다.

답변

1

나는 이미 추가 한 문자열의 목록을 유지하고 목록에없는 문자열을 찾을 때까지 새로운 임의의 문자열을 계속 선택합니다. 이 같은

뭔가 :

Vector<String> alreadyUsed = new Vector<String>(); 

for(int v : textViews) { 
    TextView tv = (TextView)findViewById(v); 

    String nextString; 
    do { 
     nextString = myString[random.nextInt(myString.length)];     
    } while (alreadyUsed.contains(nextString)); 
    alreadyUsed.add(nextString); 

    tv.setText(nextString);   
} 
+0

은 내가 찾던 정확히 무엇을, 감사합니다! for 루프의 외부에 이미 alreadyUsed.clear()를 추가 했으므로 모든 새로운 문자열을 다시 선택할 수 있지만 각 문자열에 동일한 문자열을 두 번 이상 추가하지는 않습니다. – heavy5rescue