Developer/JAVA

JAVA , 배열 예제 (서치 알고리즘 , 정렬 알고리즘 ,Arrays)

단님 2024. 8. 1. 01:04
728x90
로또 번호 생성기
(서치 알고리즘)
 Lotto 번호 생성기 만들기 1
int 를 6개 담을 수 있는 배열 생성 : lotto
Random 으로 1~45 범위의 숫자를 생성해서 배열 초기화 하기  (*추가: 단, 중복은 허용하지 않음)

 

내가 푼 부분

int lotto[] = new int[6];
Random random = new Random();
int maxNumber =  1; // 최대값의 초기값은 1
int minNumber = 45; // 최소값의 초기값은 45
for (int i = 0; i < lotto.length; ) {
	boolean bool = true;
	int randomNumber = random.nextInt(45)+1;
	
	for (int j : lotto) {
		bool = randomNumber !=j; //같지 않아야 true , 같으면 false 
		if (randomNumber==j) break; //false 일때 멈추고 다시 진행되야함.
	}
			
	if (bool) { // 전부 같지 않아서 true 가 떨어진다면 실행할 실행문
		lotto[i] = randomNumber ; 
		if(maxNumber<randomNumber) {
			maxNumber = randomNumber;
		}else {
			minNumber = randomNumber;
		}
		i++;
	}
}

System.out.println(Arrays.toString(lotto));
System.out.printf("최대값 %d , 최소값 %d %n", maxNumber,minNumber);

boolean 값을 이용하여 중복 체크를 실행하였다.

강사님은 만약 같을 경우 i--; 를 하는 방법을 사용하였는데 약간 차이가 있었다.

 

로또 번호 숫자 정렬
(정렬 알고리즘)
for (int i = 0; i < lotto.length; i++) {
	for (int j = i+1 ; j < lotto.length; j++) {
		if (lotto[i] > lotto[j]) {
			int tem = lotto[i];
			lotto[i] = lotto[j];
			lotto[j] = tem;
		}
	}
}

값의 치환을 이용하여 자리를 바꿔 주었다.

 

Arrays 의 래퍼클래스.
  • Arrays.equals()

두 배열의 값을 비교하여 동일한지 여부를 boolean 값으로 반환한다.

모든 요소가 동일하면 true , 그렇지 않으면 false 를 반환한다.

int[] array1 = {1, 2, 3};
int[] array2 = {1, 2, 3};
int[] array3 = {4, 5, 6};

boolean isEqual1 = Arrays.equals(array1, array2); // true
boolean isEqual2 = Arrays.equals(array1, array3); // false

   null의 비교

배열의 null값이 있을 경우

int[] array1 = null;
int[] array2 = null;
int[] array3 = {1, 2, 3};

boolean isEqual1 = Arrays.equals(array1, array2); // true
boolean isEqual2 = Arrays.equals(array1, array3); // false

두 매개변수가 모두 null 이기 때문에

equals(array1, array2)는 즉 , equals(null, null) 임으로 true 를 반환한다.

 

  • Arrays.sort()

배열을 정렬하는데 사용한다. 기본적으로 오름차순으로 정렬한다.

int[] array = {5, 3, 2, 4, 1};
Arrays.sort(array);
// array는 이제 {1, 2, 3, 4, 5}로 정렬됨

String[] strArray = {"banana", "apple", "cherry"};
Arrays.sort(strArray);
// strArray는 이제 {"apple", "banana", "cherry"}로 정렬됨

주석과 같이 원본의 배열을 정렬하여 원본을 바꾼다.

 

sort(null)은 ?

int[] array = null;
Arrays.sort(array); // NullPointerException 발생

sort 메서드가 배열을 정렬하기위해 배열의 요소에 접근하려고 시도하기 때문에,

배열이 null 인경우 접근할 요소가 없어 예외가 발생하게 된다.

 

두개의 로또 번호 생성기 정렬 후 비교
//my Number 생성 후 비교 하기.
random = new Random();
int myNumber [] = new int[6];
for (int i = 0; i < myNumber.length; i++) {
	 myNumber[i] = random.nextInt(45)+1;
	for (int j = 0; j < i; j++) {
		if (myNumber[i]==myNumber[j]) {
			--i; break;
		}
		
	}
}
Arrays.sort(myNumber);
System.out.println("정렬 된 :"+Arrays.toString(myNumber));

if (Arrays.equals(lotto, myNumber)) {
	System.out.println("당첨 !");
}else {
	System.out.println("다시 도전 !");
}

lotto 의 배열과 myNumber의 배열을 비교하여 출력한다.

 

당첨될때 까지 while 문을 돌려 당첨까지 되는데 흡사 무한루프였다.

로또는 기대하지 말아야 할것같다..................................

 

카드섞기 shuffle
(정렬 알고리즘)
 길이가 10인 배열 정의 하고, 0~9 로 초기화
random 을 이용해서 배열의 임의의 위치에 있는 배열의 값과
배열의 첫번째(0) 값과 교환하는일을 100번 반복해서 배열을 뒤섞이도록 한후, 출력하기.
int card [] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
Random random3 = new Random();
for (int i = 0; i < 100; i++) {
	int randomCardNumber = random3.nextInt(9)+1; 
	//1~9 사이 범위 , //random3.nextInt(10); 0~9 사이 범위
	int tem = card[0];
	card[0] =card[randomCardNumber];
	card[randomCardNumber] = tem;
	
	System.out.println(Arrays.toString(card)+ (i+1)+"회째");
}

값을 치환하여 정렬하는 알고리즘을 이용하여 인덱스 0 번째의 값이 바뀌는지 확인한다.