[2017/1/31] Project Java 7일차: CH 5. 배열 코드

1.
int[] score = new int[4];
int k = 1;

score[0] = 1;
score[1] = 2;
score[2] = 3;
score[3] = 4;

for(int i = 0; i < score.length; i++){ if (i != score.length-1){ System.out.print(score[i] + ", "); } else { System.out.print(score[i]); } } System.out.println(); System.out.println(Arrays.toString(score)); --> 배열을 출력하는 두가지 방법. for문 이용법과 Arrays.toString(str) 이용범
주의할 점은 toString 메서드는 Array’s’ 클래스 안에 있다는 것이다.

2.
char[] Arr4 = {‘a’, ‘b’, ‘c’, ‘d’};
System.out.println(Arrays.toString(Arr4)); –> [‘a’, ‘b’, ‘c’, ‘d’]
System.out.println(Arr4); –> abcd (char형 배열에 한해서 참조형 변수의 이름을 그대로 println에 넣으면 배열의 요소가 하나의 문자열로 출력된다.

3.
char[] abc = {‘A’, ‘B’, ‘C’, ‘D’};
char[] num = {‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’};
System.out.println(abc);
System.out.println(num);

char[] result = new char[abc.length + num.length];
System.arraycopy(abc, 0, result, 0, abc.length);
System.arraycopy(num, 0, result, abc.length, num.length);

System.out.println(result);
–> 배열을 복사하는 방법으로는 for문을 이용하거나 System.arraycopy()를 이용하면 된다.
arraycopy는 camel 없이 모두 소문자다. 따로 반환값이 없다.

4. 배열의 활용
1) 평균
int sum = 0;
float average = 0.0f;

int[] score = {100, 88, 100, 100, 90};

for (int tmp : score){
sum += tmp;
}

average = (float)sum / score.length;
System.out.println(average);

2) 최댓값, 최솟값
int[] score = {79, 88, 91, 33, 100, 55, 95};

int max = score[0];
int min = score[0];

for (int i = 0; i < score.length; i++){ if(score[i] > max){
max = score[i];
}
else if(score[i] < min){ min = score[i]; } } System.out.println("최댓값: "+max); System.out.println("최솟값: "+min); 3) 섞기 int[] numArr = new int[10]; for (int i = 0; i < numArr.length; i++){ numArr[i] = i; System.out.print(i); } System.out.println(); for (int i = 0; i < 100; i++){ int n = (int)(Math.random() * 10); int tmp = numArr[0]; numArr[0] = numArr[n]; numArr[n] = tmp; } for (int i = 0; i < numArr.length; i++){ System.out.print(numArr[i]); } System.out.println(); System.out.println(Arrays.toString(numArr)); --> 다소 미개한 방법

4) 로또 번호
int[] ball = new int [45];

for (int i = 0; i < ball.length; i++){ ball[i] = i; } int tmp = 0; int j = 0; for (int i = 0; i < 6; i++){ j = (int)(Math.random() * 45); tmp = ball[j]; ball[j] = ball[i]; ball[i] = tmp; } for (int i = 0; i < 6; i++){ System.out.print(ball[i]+" "); } --> 위 방법보다 진화한 방법

5) 임의의 값으로 배열 채우기
int[] code = {-4, -1, 3, 6, 11};
int[] arr = new int[10];

for (int i = 0; i < arr.length; i++){ int tmp = (int)(Math.random() * code.length); arr[i] = code[tmp]; } System.out.println(Arrays.toString(arr)); 6) 버블 정렬 int[] arr = new int[10]; for (int i = 0; i < arr.length; i ++){ System.out.print(arr[i] = (int)(Math.random() * 10)); } //System.out.println(Arrays.toString(arr)); System.out.println(); for (int i = 0; i < arr.length - 1; i++){ boolean changed = false; for(int j = 0; j < arr.length - 1 - i; j++){ if(arr[j] > arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
changed = true;
}

if(!changed){
break;
}

for (int k = 0; k < arr.length; k++){ System.out.print(arr[k]); } System.out.println(); //System.out.println(Arrays.toString(arr)); } } 7) 빈도수 구하기 int[] arr = new int[10]; int[] counter = new int[10]; for (int i = 0; i < arr.length; i++){ System.out.print(arr[i] = (int)(Math.random() * 10)); } System.out.println(); for (int i = 0; i < arr.length; i++){ counter[arr[i]]++; } for (int i = 0; i < counter.length; i++){ System.out.println(i+"의 개수: "+counter[i]); } 5. String[] names = {"Kim", "Park", "Yi"}; for(int i = 0; i < names.length; i++){ System.out.println("names ["+i+"] = "+names[i]); } for (String str : names){ System.out.println(str); } --> 향상된 for문 사용

6.
String src = “ABCDE”;

char[] chArr = src.toCharArray();

System.out.println(chArr);
–> String 클래스 역시 char 배열과 마찬가지로 참조형 변수를 출력했을 때 ABCDE가 출력된다.

7. 이차원배열
int[][] score = {
{100, 100, 100}
,{20, 20, 20}
,{30, 30, 30}
,{40, 40, 40}
};

int sum = 0;

for(int[] tmp : score){
for(int i : tmp){
sum += i;
}
}

System.out.println(sum);

8. 이차원배열 종합
int[][] score = {
{100, 100, 100}
,{20, 20, 20}
,{30, 30, 30}
,{40, 40, 40}
,{50, 50, 50}
};

int korTotal = 0;
int engTotal = 0;
int mathTotal = 0;

System.out.println(“번호 국어 영어 수학 총점 평균”);
System.out.println(“—————————“);

for(int i = 0; i < score.length; i++){ int sum = 0; float avg = 0.0f; korTotal += score[i][0]; engTotal += score[i][1]; mathTotal += score[i][2]; System.out.printf("%3d", i+1); for (int j = 0; j < score[i].length; j++){ sum += score[i][j]; System.out.printf("%5d", score[i][j]); } avg = sum/ (float)score[i].length; System.out.printf("%5d %5.1f%n", sum, avg); } System.out.println("---------------------------"); System.out.printf("총점: %3d %4d %4d%n", korTotal, engTotal, mathTotal); 9. 다차원 배열의 활용 1) 좌표에 X하기 final int SIZE = 10; int x = 0, y = 0; char[][] board = new char[SIZE][SIZE]; byte[][] shipBoard = { //1 2 3 4 5 6 7 8 9 {0, 0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 0} }; for(int i = 1; i < SIZE; i++){ board[i][0] = board[0][i] = (char)(i + '0'); } Scanner scanner = new Scanner(System.in); while(true){ System.out.printf("좌표를 입력하세요. (종료는 00)>“);
String input = scanner.nextLine();

if(input.length() == 2){
x = input.charAt(0) – ‘0’;
y = input.charAt(1) – ‘0’;

if (x == 0 && y == 0)
break;
}

if (input.length() != 2 || x <= 0 || x >= SIZE || y <= 0 || y >= SIZE){
System.out.println(“잘못된 입력이다”);
continue;
}

board[x][y] = shipBoard[x-1][y-1] == 1 ? ‘O’ : ‘X’;

for (int i =0; i < SIZE; i++){ System.out.println(board[i]); } System.out.println(); } --> 숫자 1을 문자 1로 변환하기 위해서는 (char)(1 + ‘0’);
–> String 클래스의 길이를 구하기 위해서는 .length()를 해야함. 괄호 안 치면 에러

2) 빙고
final int SIZE = 5;
int x= 0, y = 0;
int num = 0;

int[][] bingo = new int[SIZE][SIZE];
Scanner scanner = new Scanner(System.in);

for(int i = 0; i < SIZE; i++){ for(int j = 0; j < SIZE; j++){ bingo[i][j] = i * SIZE + j + 1; } } for (int i = 0; i < SIZE; i ++){ for(int j = 0; j < SIZE; j++){ x = (int)(Math.random() * SIZE); y = (int)(Math.random() * SIZE); int tmp = bingo[i][j]; bingo[i][j] = bingo[x][y]; bingo[x][y] = tmp; } } do{ for(int i = 0; i < SIZE; i++){ for(int j = 0; j < SIZE; j++){ System.out.printf("%3d", bingo[i][j]); } System.out.println(); } System.out.println(); System.out.printf("1~%d의 숫자를 입력하세요>“, SIZE);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);

outer:
for(int i = 0; i < SIZE; i++){ for(int j = 0; j < SIZE; j++){ if(bingo[i][j] == num){ bingo[i][j] = 0; break outer; } } } }while(num != 0);

댓글 남기기