[이중 for문]
반복문 2개를 사용해서 직사각형의 데이터를 표현할수있다.
1. 첫번째 반복문 (i) 가 세로를 담당한다.
2. 두번째 반복문 (j) 가 가로를 담당한다.
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
System.out.print("[i] = " + i + " [j] = " + j );
}
System.out.println();
}
라고 강의 설명되어 있지만 이번 챕터 전에 while문 안에 for문이나 while문 넣는다던지 은연중에 사용된듯한 느낌...
[사각형그리기]
아래와같은 사각형을 출력하시오.
### ### ###
1) 단일 for문을 사용할 경우
for(int i=0; i<9; i++) {
System.out.print("#");
if(i % 3 == 2) {
System.out.println();
}
}
나머지로 판단해서 i가 3, i가 6 이 되면 println로 줄바꿈
2) 이중 for문을 사용할 경우
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print("#");
}
System.out.println();
}
두번째 for문에서 #을 세번 출력하고 두번째 for문이 끝나면 println로 줄바꿈
[중첩반복문과배열]
int[] arr = new int[12];
int k=0;
for(int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++ ) {
arr[k] += k + 1; // 0부터 증가이므로 k+1
k+= 1; // k가 총 12번 증가함
}
}
System.out.println(Arrays.toString(arr));
단일 for문을 12번 반복해도 나오긴 하지만 이중 for문 예시로 적용된듯 하다.
[문제]
b의 값들 은arr1의 인덱스이다.
arr1배열에서 b의 값들이 가르키는 인덱스의 값을 출력
int arr1[] = {10,20,30,40,50};
int b[] = {1,4,0};
System.out.println("흔히 아래와같이 오류를 범한다.");
System.out.println("b의 값은 arr배열의 인덱스 이므로 아래와같이 복잡하게 찾을필요없다.");
System.out.println("----------------");
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < arr1.length; j++) {
if (b[i] == j) {
System.out.print(arr1[j] + " ");
}
}
}
System.out.println();
System.out.println("----------------");
for (int i = 0; i < b.length; i++) {
int index = b[i];
System.out.print(arr1[index]+ " ");
}
System.out.println();
System.out.println("----------------");
for (int i = 0; i < b.length; i++) {
System.out.print(arr1[b[i]] + " ");
}
나도 많이 작성했던 중복코드로 인덱스가 주어졌음에도 해당 배열에서 인덱스를 또 찾아내는 코드를 작성했다. 효율도 안좋을뿐더러 인덱스 찾아내는 코드의 의미도 없다...
Random rnd = new Random();
int arr[] = new int[4];
for (int i = 0; i < 4; i++) {
arr[i] = i + 1; // 여기서 중복되지 않는 숫자가 들어가는데 왜 아래에서 100번을?
// ===> 카드게임같이 수가 많을때는 여러번 섞어야 정상적으로 셔플이 됨
}
System.out.println(Arrays.toString(arr));
for (int i = 0; i < 100; i++) {
int r1 = rnd.nextInt(4);
int r2 = rnd.nextInt(4);
int temp = arr[r1];
// System.out.println(r1 + " / " + r2);
arr[r1] = arr[r2];
arr[r2] = temp;
}
System.out.println(Arrays.toString(arr));
Random rnd = new Random();
int[] arr = new int[4];
boolean[] check = new boolean[4];
for (int i = 0; i < 4;) {
int r = rnd.nextInt(4)+1;
if (check[r-1] == false) {
check[r-1] = true;
arr[i] = r;
i += 1;
}
}
System.out.println(Arrays.toString(arr));
Random rnd = new Random();
int arr[] = new int[4];
for (int i = 0; i < 4; ) {
int r = rnd.nextInt(4) + 1;
boolean check = false;
for (int j = 0; j < i; j++) {
if (arr[j] == r) {
check = true;
break;
}
}
if (check == false) {
arr[i] = r;
i += 1;
}
}
System.out.println(Arrays.toString(arr));
셔플
boolean 배열 활용
전체검사