티스토리 뷰
#2차원 배열의 선언
1차원 배열의 선언에서 대괄호[] 하나만 추가하면 2차원 배열을 선언할 수 있다.
2차원 배열 선언 방법
타입[][] 변수이름;
2차원 배열은 테이블 형태로 데이터를 저장하는 데 사용된다.
예시) int[][] ex = new int[4][3];
위의 문장은 4행 3열의 데이터를 담는 배열을 생성한 것이다. 생성한 배열은 12개의 int값을 저장할 수 있다.
배열을 생성하면 배열 요소에 타입의 기본값이 자동적으로 저장된다.(int형의 기본값은 0이다.)
#2차원 배열의 인덱스
2차원 배열은 행(row)과 열(cloumn)으로 구성되어 있다. 행과 열은 index에도 각각 한 개씩 존재한다.
index의 범위
행 index의 범위 : '0 ~ 행의 길이 -1'
열 index의 범위 : '0 ~ 열의 길이 -1'
예시) int[][] socre = new int[5][4];
위의 문장의 행과 열의 인덱스 범위는 '행 index범위 : 0~4 , 열 index범위 : 0~3'이다.
2차원 배열의 각 요소의 접근하는 방법은 '배열 이름[행 index] [열 index]'이다.
예시) int[][] score= new int [2][3]; // 2행 3열의 2차원 배열 score생성
위의 문장과 같이 배열을 생성하면, socre[0][0]부터 score[1][2]까지의 모두 6개 (2*3=6)의 int값을 저장할 수 있는 저장공간이 생긴다.
score[0][0] | score[0][1] | score[0][2] |
score[1][0] | score[1][1] | score[1][2] |
#2차원 배열의 초기화
2차원 배열의 초기화 방법은 1차원 배열의 초기화에 괄호{}를 하나 더 추가하여 행별로 구분해주면 된다.
그리고 1차원 배열처럼 생성과 초기화를 동시에 할 수 있다.
예제 1) 배열 score의 모든 요소의 합 구하기.
public class Ex5_8 {
public static void main(String[] args) {
//배열 생성과 초기화
int[][] score = {
{ 100, 100, 100 },
{ 20, 20, 20 },
{ 30, 30, 30 },
{ 40, 40, 40 }
};
int sum = 0; //score전체를 더하는 변수
//socre.length(행) , score[i].length(열)
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
System.out.printf("socre[%d] [%d] = %d%n", i, j, score[i][j]);
sum += score[i][j];
}
}
System.out.println("sum = " + sum);
}
}
int[][] score = {}; 을 사용하여 4행 3열의 배열을 생성했다. 그리고 배열의 행은 길이가 달라도 괜찮다.
2차 배열을 쓰기 위해서는 이중 반복문을 써야 한다.
score.length는 행의 길이로 score.length = 4이다.
score[i].length는 열의 길이로 score[i].length = 3이다.
안쪽 for문의 출력문은 배열 score의 값을 찍어내고, 그 값을 아래 문장인 변수 sum에 값을 차례대로 저장한다.
마지막 출력문에 있는 변수 sum은 차례대로 저장되었던 값을 출력하여 보여준다.
* 출력 결과
socre[0] [0] = 100
socre[0] [1] = 100
socre[0] [2] = 100
socre[1] [0] = 20
socre[1] [1] = 20
socre[1] [2] = 20
socre[2] [0] = 30
socre[2] [1] = 30
socre[2] [2] = 30
socre[3] [0] = 40
socre[3] [1] = 40
socre[3] [2] = 40
sum = 570
예제 2) 5명의 학생의 세 과목 점수의 총점과 평균 구하기.
public class Ex5_9 {
public static void main(String[] args) {
int[][] score = {
{100, 100, 100},
{20, 20, 20},
{30, 30, 30},
{40, 40, 40},
{50, 50, 50}
};
//과목별 총점
int korTotal = 0, engTotal = 0 , 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);
}
}
int [][] socre = {}; 사용하여 5행 3열의 배열을 생성했다.
이 부분에서 score.length = 5, score [i]. length = 3이라는 것을 알 수 있다.
바깥 for문에서는 개인별 총점, 평균을 초기화 및 개인별 과목의 점수를 각각 과목 변수에 저장하고 번호를 출력한다.
안쪽 for문은 개인별 과목 성적을 더하여 한 줄의 값의 총합을 출력한다.
총합의 출력이 끝나면 다음 문장인 평균을 구하는 코드를 실행한다.
정확한 값을 위해 평균은 float로 형변환하여 열의 길이(score [i]. length)로 나누면 된다.
반복문은 바깥 for문의 조건이 ture일 때까지 돌아가다가 false가 되면 반복문을 빠져나와 그다음 코드를 순차적으로 실행하게 된다.
* 출력 결과
번호 국어 영어 수학 총점 평균
=============================
1 100 100 100 300 100.0
2 20 20 20 60 20.0
3 30 30 30 90 30.0
4 40 40 40 120 40.0
5 50 50 50 150 50.0
=================================
총점:240 240 240
예제 3) 영단어 뜻 맞추기
import java.util.Scanner;
public class Ex5_10 {
public static void main(String[] args) {
String[][] words = {
{"chair", "의자"},
{"computer", "컴퓨터"},
{"integer", "정수"}
};
Scanner scanner = new Scanner(System.in);
for(int i = 0; i< words.length; i++) {
System.out.printf("Q%d. %s의 뜻은?", i+1, words[i][0]); //%s - 문자열 출력지시자
String tmp = scanner.nextLine();
if(tmp.equals(words[i][1])) {
System.out.printf("정답입니다.%n%n");
} else {
System.out.printf("틀렸습니다. 정답은 %s입니다. %n%n" , words[i][1]);
}
}
}
}
for문의 words[i][0]은 문제이고, if문의 words[i][1]은 정답이다.
콘솔 창에 영어단어가 뜨면 콘솔창에 정답을 입력하면 scanner.nextLine()을 통해 입력한 문자가 tmp에 저장된다.
그다음에 tmp에 저장된 값을 equlas()를 이용하여 words[i][1]와 같은지 비교해서 정답인지 확인한다.
* 출력 결과
Q1. chair의 뜻은?나무
틀렸습니다. 정답은 의자입니다.
Q2. computer의 뜻은?컴퓨터
정답입니다.
Q3. integer의 뜻은?정수
정답입니다.
'개발 공부 > JAVA' 카테고리의 다른 글
[Java] 선언 위치에 따른 변수 종류, 메서드 호출 및 실행 (0) | 2022.02.03 |
---|---|
[Java] 객체지향언어, 객체, 클래스, 인스턴스 (0) | 2022.01.24 |
[Java] String배열의 선언과 생성, 초기화, 클래스, 주요 메서드 (0) | 2022.01.12 |
[Java] 배열 선언과 생성, 인덱스, 길이, 초기화, 출력 (0) | 2022.01.07 |
[Java] break문, continue문 (0) | 2021.12.17 |
- Total
- Today
- Yesterday
- Lv.0
- 인스턴스 메서드
- SQL
- 객체의 구성요소
- JAVA의 정석
- 객체지향 언어
- 객체지향
- Java
- do-while문
- 클래스와 객체
- 기본 생성자
- JAVA 의 정석
- 2차배열 예제
- 조건문 if
- 프로그래머스
- 기본형/참조형 매개변수
- 객체 배열
- 프로글개머스 `
- 호출스택
- 생활코딩
- return문
- MySQL
- 두 수의 나눗셈
- 자바의 정석
- 코테
- 메서드 간의 호출과 참조
- java의 정석기초
- 매개변수가 있는 생성자
- java의정석 기초
- string 배열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |