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);