반응형
자바의 정석 11-10 예제 ) 숫자들의 위치가 잘 섞이지 않는 문제 이유와 해결하기
import java.util.*;
public class Exercise11_10 {
public static void main(String[] args) {
Set set=new HashSet();
int[][] board=new int[5][5];
for(int i=0;set.size()<25;i++) {
set.add((int)(Math.random()*30)+1+"");
}
Iterator it=set.iterator();
for(int i=0;i<board.length;i++) {
for(int j=0;j<board[i].length;j++) {
board[i][j]=Integer.parseInt((String)it.next());
System.out.print((board[i][j]<10?"":"")+board[i][j]);
}
System.out.println();
}
}
}
정답
HashSet의 특징은 -> 순서를 유지하지 않고, 중복을 허용하지 않는다는 것.
이 문제를 해결하기 위해서는?
순서 유지가 필요하다.
=> Set을 List로 옮기고 List를 정렬하면 된다.
ArrayList list=new ArrayList(set);
Collections.shuffle(list);
Iterator it=list.iterator();
(LinkedList도 상관없고)
1. set의 모든 요소를 ArrayList에 담고
2. Collections.shuffle()을 이용해 저장된 데이터들의 순서를 뒤섞는다.
=>컬렉션 클래스의 매개변수 타입이 Collection 인터페이스이기 때문에
자손인 List, Set 인터페이스를 구현한 모든 클래스의 인스턴스가 매개변수로 가능!
반응형
'📒 education archive > 🎀JAVA' 카테고리의 다른 글
[국비학원 기록/자바] 스캐너, 2차원 배열 활용한 학생 5명의 성적 출력 프로그램 구현하기 (0) | 2021.12.02 |
---|---|
자바 공부 기록(15)-Comparator 와 Comparable, 예제 (0) | 2021.11.15 |
[국비학원 기록/자바] 연결 리스트(Linked List) 종류, 구현, 노드 중간 데이터 추가 (0) | 2021.11.07 |
[국비학원 기록/자바] 스레드02. 제어 메서드, join(),interrupt(),wait(),notify(),notifyAll() (0) | 2021.10.31 |
[국비학원 기록/자바] 쓰레드01. 프로세스, 스레드(Thread)장점, 단점,우선순위 (0) | 2021.10.31 |