2017-04-22 1 views
1

저는 학교 프로젝트를 위해 작은 게임을하고 있습니다. 플레이어는 아마도 문자 목록 (나중에 배열에 넣을 픽킹 된 문자)에서 선택할 수 있으며 각 문자는 하나의 문자만으로 구성된 이름을 가질 수 있습니다.목록의 문자 인수에서 반복을 방지하려면 어떻게합니까?

문자 풀을 ArrayList에 넣었지만 이름으로 문자를 반복하는 것을 방지하는 방법을 모르겠습니다.

ArrayList<Character> names = new ArrayList<Character>(); 

     while (names.size() < 10) { 
      char random = (char) ((char) rand.nextInt(26)+'A'); 
      if (!names.contains(random)) { 
       names.add(random); 
      } 
     } 

ArrayList<Person> charpool = new ArrayList<Person>(); 

     while (charpool.size() < 10){ 
      charpool.add(new Person(names.get(rand.nextInt(10)), 
         (r1.nextInt(100)+1), (r1.nextInt(100)+1), 
         (r1.nextInt(100)+1), (r1.nextInt(100)+1), 
         (r1.nextInt(100)+1), (r1.nextInt(100)+1), 
         (r1.nextInt(100)+1), (r1.nextInt(100)+1), 
         (r1.nextInt(100)+1), (r1.nextInt(100)+1), 
         true, (r1.nextInt(100)+1), 1)); 
     } 

int 변수의 광기가 긴 목록에는 신경 쓰지 마라. 무작위 기술을위한 것이다. 아마 더 예뻐질 수도 있지만이 시점에서 나는 상관하지 않습니다.

저는이 자바 전체에 대해 새로운 것이기 때문에 목록이나 비슷한 것을 사용하지 않았습니다.

답변

0

정확하게 이해하고 있다면 ArrayList<Person> charpool을 작성할 때 각 사람마다 고유 한 캐릭터를 갖고 싶습니다.

한 번 사용하면 names에서 문자를 제거 할 수 있습니다.

while(charpool.size() < 10) { 
    int index = rand.nextInt(names.size()); //Use names.size() since the names ArrayList will get smaller each iteration 
    charpool.add(new Person(names.get(index), (r1.nextInt(100)+1), (r1.nextInt(100)+1), (r1.nextInt(100)+1), (r1.nextInt(100)+1), (r1.nextInt(100)+1), (r1.nextInt(100)+1), (r1.nextInt(100)+1), (r1.nextInt(100)+1), (r1.nextInt(100)+1), (r1.nextInt(100)+1), true, (r1.nextInt(100)+1), 1)); 
    names.remove(index); 
} 
+0

빠른 저장 감사합니다. 나는 솔루션이 쉬울 것이라고 생각했지만, 내가 말했듯이, 나는 초보자이다. – Delais

관련 문제