오늘은 다차원 배열 내용에 대해서 들어갔다... 1차원 배열이랑은 차원이 다르게 훨씬 어려웠다는거,,,
이론은 적지만 실습들이 꽤나 어려웠다ㅠㅠ 이론부터 정리를 해보자면 !!!
* 다차원 배열
- 생성할 때 행의 개수 꼭 써야 한다
1. 고정길이 - 자료형[][] 배열명 = { {값1, 값2,...}, {값3, 값4,...}, {...},...};
- 자료형[][] 배열명;
배열명=new 자료형[개수][개수];
2. 가변길이
- 자료형[][] 배열명;
배열명 = new 자료형[개수][];
배열명[0] = new 자료형[개수];
배열명[1] = new 자료형[개수];
배열명[2] = new 자료형[개수];
MultiArray01.java
package multiArray;
public class MultiArray01 {
public static void main(String[] args) {
int[][] ar;
//int ar[][];
ar = new int[3][2];
ar[0][0] = 10;
ar[0][1] = 20;
ar[1][0] = 30;
ar[1][1] = 40;
ar[2][0] = 50;
ar[2][1] = 60;
System.out.println("배열명 ar = " + ar);
for(int i=0; i<ar.length; i++) {//행
System.out.println("ar[" + i + "] = " + ar[i]);
for(int j=0; j<ar[i].length; j++) {//열
System.out.println("ar["+ i + "][" + j + "] = " + ar[i][j]);
}
System.out.println();
}
}
}
배열명 ar = [[I@372f7a8d
ar[0] = [I@85ede7b
ar[0][0] = 10
ar[0][1] = 20
ar[1] = [I@7229724f
ar[1][0] = 30
ar[1][1] = 40
ar[2] = [I@4c873330
ar[2][0] = 50
ar[2][1] = 60
ar.length / ar[i].length
위에 두 개 차이를 알아야 한다 !!
ar.length는 행 즉 위에서는 3이 되는 것이고
ar[i].length는 열 즉 위에서는 2가 되는 것이라고 할 수 있다.
MultiArray02.java
- 1~100까지 출력하는 기본 실습
package multiArray;
public class MultiArray02 {
public static void main(String[] args) {
int[][] ar = new int[10][10];
int num = 0;
//입력
/*
for(int i=0; i<ar.length; i++) {
for(int j=0; j<ar[i].length; j++) {
num++;
ar[i][j] = num;
}
}
*/
/*
for(int i=0; i<ar.length; i++) {
for(int j=0; j<ar[i].length; j++) {
num++;
ar[j][i] = num;
}
}
*/
for(int i=ar.length-1; i>=0; i--) {
for(int j=ar[i].length-1; j>=0; j--) {
num++;
ar[i][j] = num;
}
}
//출력
for(int i=0; i<ar.length; i++) {//행
for(int j=0; j<ar[i].length; j++) {//열
System.out.print(String.format("%5d", ar[i][j]));
}
System.out.println();
}
}
}
100 99 98 97 96 95 94 93 92 91
90 89 88 87 86 85 84 83 82 81
80 79 78 77 76 75 74 73 72 71
70 69 68 67 66 65 64 63 62 61
60 59 58 57 56 55 54 53 52 51
50 49 48 47 46 45 44 43 42 41
40 39 38 37 36 35 34 33 32 31
30 29 28 27 26 25 24 23 22 21
20 19 18 17 16 15 14 13 12 11
10 9 8 7 6 5 4 3 2 1
MultiArray03.java
package multiArray;
public class MultiArray03 {
public static void main(String[] args) {
int[][] ar = {{1, 2, 3, 0}, {4, 5, 6, 0}, {7, 8, 9, 0}, {0, 0 , 0, 0}}; //4행 4열
//계산1
for(int i=0; i<ar.length-1; i++) {
for(int j=0; j<ar[i].length-1; j++) {
ar[i][3] += ar[i][j];
//ar[3][i] += ar[j][i];
ar[3][j] += ar[i][j];
ar[3][3] += ar[i][j];
}
}
//출력
for(int i=0; i<ar.length; i++) {//행
for(int j=0; j<ar[i].length; j++) {//열
System.out.print(String.format("%5d", ar[i][j]));
}
System.out.println();
}
}
}
1 2 3 6
4 5 6 15
7 8 9 24
12 15 18 45
[QUIZ1] 성적 계산
1. 공식
총점 = 국어 + 영어 + 수학
평균 = 총점 / 과목수
학점은 평균이 90이상이면 A
80이상이면 B
70이상이면 C
60이상이면 D
그 외는 F
2. 평균은 소수이하 2째자리까지 출력
----------------------------------------------------
이름 국어 영어 수학 총점 평균 학점
----------------------------------------------------
홍길동 90 95 100
프로도 100 89 76
라이언 75 80 48
----------------------------------------------------
MultiArray04.java
package multiArray;
public class MultiArray04 {
public static void main(String[] args) {
String[] name = {"홍길동", "프로도", "라이언"};
int[][] jumsu = {{90, 95, 100, 0}, {100, 89, 76, 0}, {75, 80, 48, 0}};
double[] avg = new double[3];
char[] grade = new char[3];
for(int i=0; i<jumsu.length; i++) {
for(int j=0; j<jumsu[i].length-1; j++) {
jumsu[i][3] += jumsu[i][j];
}//총점
avg[i] = (double)jumsu[i][3] / 3; //평균
//학점
if(avg[i] >= 90) {
grade[i] = 'A';
}
else if(avg[i] >=80) {
grade[i] = 'B';
}
else if(avg[i] >=70) {
grade[i] = 'C';
}
else if(avg[i] >=60) {
grade[i] = 'D';
}else {
grade[i] = 'F';
}
}
/*
for(int i=0; i<jumsu.length; i++) {//행
for(int j=0; j<jumsu[i].length; j++) {//열
System.out.print(String.format("%5d", jumsu[i][j]));
}
System.out.println();
}
for(int i=0; i<avg.length; i++) {
System.out.print(String.format("%.2f", avg[i]));
System.out.println();
}
for(int i=0; i<grade.length; i++) {
System.out.print(String.format("%c", grade[i]));
System.out.println();
}
*/
//출력
System.out.println("----------------------------------------------------");
System.out.println("이름\t국어\t영어\t수학\t총점\t평균\t학점");
System.out.println("----------------------------------------------------");
for(int i=0; i<jumsu.length; i++) {
System.out.print(name[i] + "\t");
for(int j=0; j<jumsu[i].length; j++) {
System.out.print(jumsu[i][j] + "\t");
}
System.out.println(String.format("%.2f", avg[i]) + "\t" + grade[i]);
}
System.out.println("----------------------------------------------------");
}
}
----------------------------------------------------
이름 국어 영어 수학 총점 평균 학점
----------------------------------------------------
홍길동 90 95 100 285 95.00 A
프로도 100 89 76 265 88.33 B
라이언 75 80 48 203 67.67 D
----------------------------------------------------
여기 가변길이부터 진짜 헷갈리기 시작.....
이론을 확실히 잡고 가자.
int[][] ar = new int[3][];
위 코드는 즉, 3행에 ?열이라고 생각하면 된다. 말 그대로 가변길이인 것이다.
밑에 코드 처럼 할당을 해주게 되면 열이 생성되는 것이다.
MultiArray05.java
package multiArray;
public class MultiArray05 {
public static void main(String[] args) {
//다차원 배열 - 가변길이(행은 고정)
int[][] ar = new int[3][];
ar[0] = new int[2];
ar[1] = new int[3];
ar[2] = new int[4];
ar[0][0] = 10;
ar[0][1] = 20;
ar[1][0] = 30;
ar[1][1] = 40;
ar[1][2] = 50;
ar[2][0] = 60;
ar[2][1] = 70;
ar[2][2] = 80;
ar[2][3] = 90;
for(int i=0; i<ar.length; i++) {//행
for(int j=0; j<ar[i].length; j++) {//열
System.out.println("ar["+ i + "][" + j + "] = " + ar[i][j]);
}
System.out.println();
}
}
}
ar[0][0] = 10
ar[0][1] = 20
ar[1][0] = 30
ar[1][1] = 40
ar[1][2] = 50
ar[2][0] = 60
ar[2][1] = 70
ar[2][2] = 80
ar[2][3] = 90
[QUIZ 2] 야구게임
- 크기가 3개인 정수형 배열을 잡고 1~9사이의 난수를 발생한다
- 발생한 난수를 맞추는 게임
- 난수는 중복을 제거한다
[실행결과]
게임을 실행하시겠습니까(Y/N) : w
게임을 실행하시겠습니까(Y/N) : u
게임을 실행하시겠습니까(Y/N) : y
게임을 시작합니다
숫자입력 : 123
0스트라이크 0볼
숫자입력 : 567
0스트라이크 2볼
숫자입력 : 758
1스트라이크 2볼
...
숫자입력 : 785
3스트라이크 0볼
프로그램을 종료합니다.
package array;
import java.io.IOException;
import java.util.Scanner;
public class BaseBall {
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
int[] com = new int[3];
int[] user = new int[3];
String yn;
int strike, ball;
do{
System.out.print("게임을 실행하시겠습니까(Y/N) : ");
yn = scan.next();
}while(!yn.equalsIgnoreCase("Y") && !yn.equalsIgnoreCase("N"));
if(yn.equalsIgnoreCase("Y")) {
System.out.println("게임을 시작합니다.");
for(int i=0; i<com.length; i++) {
com[i] = (int)(Math.random() * 9 + 1);
//중복확인
for(int j=0; j<i; j++) {
if(com[i] == com[j]) {
i--;
break;
}
}//for j
}//for i
//사용자가 숫자입력
while(true) {
System.out.print("숫자입력: ");
for(int i=0; i<user.length; i++){
user[i] = System.in.read() - '0';
}
System.in.read();
System.in.read(); //enter값 처리 필수 ★★★★★
System.out.println(com[0] + "," + com[1] + "," + com[2]);
System.out.println(user[0] + "," + user[1] + "," + user[2]);
//비교
strike = 0;
ball = 0; //반드시 초기화 !!! ★★★★★
for(int i=0; i<com.length; i++) {
for(int j=0; j<user.length; j++) {
if(com[i] == user[j]) {
if(i == j) strike++;
else ball++;
}
}
}
System.out.println(strike + "스트라이크 " + ball + "볼");
System.out.println();
if(strike == 3) break;
}
}
System.out.println("프로그램을 종료합니다.");
}
}
게임을 실행하시겠습니까(Y/N) : e
게임을 실행하시겠습니까(Y/N) : t
게임을 실행하시겠습니까(Y/N) : y
게임을 시작합니다.
숫자입력: 456
4,5,6
1스트라이크 1볼
숫자입력: 423
4,2,3
0스트라이크 0볼
숫자입력: 459
4,5,9
1스트라이크 0볼
숫자입력: 753
7,5,3
1스트라이크 1볼
숫자입력: 657
6,5,7
3스트라이크 0볼
프로그램을 종료합니다.
System.out.print("숫자입력: ");
for(int i=0; i<user.length; i++){
user[i] = System.in.read() - '0';
}
System.in.read();
System.in.read(); //enter값 처리 필수 ★★★★★
이쪽 코드가 관건이었는데
숫자를 입력했을 때 하나씩 받아 user[i]에 넣기위해서 System.in.read()을 이용하는 것이다.
추가로 엔터값이 포함되므로 System.in.read(); 두 번을 해줘서 enter 값을 처리해줘야 한다.
'JAVA' 카테고리의 다른 글
DAY 4 - 반복문 (2024.07.08) (0) | 2024.08.13 |
---|---|
DAY 5 - 배열 / 선택정렬 / 버블정렬 (2024.07.09) (0) | 2024.08.13 |
DAY 7 - 배열 / 클래스(객체) (2024.07.11) (0) | 2024.08.13 |
DAY 7 - HOMEWORK - 클럽 회원관리 (2024.07.11) (0) | 2024.08.12 |
DAY 8 - 메서드 / VarArgs / StringBuffer / StringBuilder (2024.07.12) (0) | 2024.08.12 |