🔥 Vamos/Java

0920 | 배열 로또번호 출력 실습 & 해설

unikue 2022. 9. 20. 23:37

자바의 정석 3판 199페이지

public static void main(String[] args) {
		int[] ball = new int[10];
		
		int i=0;
		for (i=0; i<ball.length;i++) { 
       		 // <= 로 하면 인덱스는 9까지만 존재하는데 범위가 10이라 out of range 에러가뜬다
		
     	  	 ball[i]=i+1;				// 배열 초기화
		}
		System.out.println(Arrays.toString(ball)); // 굳이 출력안해도 되지만 제대로 들어갔나 확인용
		
		int tmp=0, j=0;
		
		for(i=0; i<=6; i++) {	// 6개의 수만 출력할 예정
		j= (int)(Math.random()*10); 
		/* 0 < j < 10 인덱스값이 9까지 있으므로 굳이 +1 안해도됨.
		 for문안에 들어와있어야 i가 돌때마다 랜덤값이 부여됨.*/
		tmp = ball[i];			// 숫자 교환
		ball[i]= ball[j];		// j에는 랜덤값이 들어간다
		ball[j]= tmp;
		}
		
		for(i=0;i<6;i++)	// 인덱스값은 0~5까지이므로 설정시 주의
			System.out.printf("ball[%d]=%d%n", i, ball[i]);
		
		}// end of main

Good

전체적인 흐름을 설계하고 주석을 미리 기재한 뒤에 코드를 짜라는 말씀을 생각해보며 했더니 흐름은 잡았다. tmp를 사용해서 서로 수를 교환하는것도 기억해냈다. 그러나...

 

Bad

① 의도적으로 1~10으로 숫자를 줄였음에도 인덱스 0~9 범위와 헷갈려서 자잘한 오류가 있었다. 해당 범위가 인덱스값인걸 인지하며 짜야한다.

② Math.random()을 써야겠단 생각은 했는데 어디에 끼워넣어야하나 헷갈렸다. Math.random()자체가 임의값이므로 괄호 안에 굳이 ball[i]를 안넣어도 된다.

③ 배열에 값입력 하는 부분에서 의외로 헤맸다. ball[i]이렇게 써두고 고민함...😂😬

④  for문이 실행문 하나는 괄호가 없어도 되다보니 어디까지 묶어주고 println을 어디에 붙여야 하나 조금 고민했다.

 

안보고 실습하려는 시도는 좋았다. 미스한 기록을 위해 기재해두고, 다시 여러번 해볼것!