● 2차원 배열
- 배열 안에 배열
- 1차원 배열을 여러 개 선언할 때 관리하기 힘들기 때문에 2차원 배열을 한 번 선언한다.
※ 2차원 이상의 배열은 메모리 낭비가 심하므로 선호하지 않는다.
● 2차원 배열 선언
- 자료형[][] 배열명 = {{값1, 값2, ...}, {값3, 값4, ...}};
- 자료형[][] 배열명 = new 자료형[행][열];
- 자료형[][] 배열명 = null;
배열명 = new 자료형[행][열];
(ex) int[][] arrData = new int[2][3];
![](https://blog.kakaocdn.net/dn/cT0trf/btrt4f97tcw/7fkOKTsbWuR0nfLwhWHZWK/img.png)
실습(배열)
1. 5개의 정수를 입력받고 배열에 담은 후 최대값과 최소값 출력하기
import java.util.Scanner;
public class ArTask1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arData = new int[5];
int max = 0; // 최대값을 담아줄 변수
int min = 0; // 최소값을 담아줄 변수
for (int i = 0; i < arData.length; i++) {
System.out.print(i + 1 + "번째 정수 : ");
arData[i] = sc.nextInt(); // 입력받은 정수를 arData 배열에 담아준다.
}
max = arData[0]; // 최대값을 arData[0]의 값으로 초기화한다.
min = arData[0]; // 최소값을 arData[0]의 값으로 초기화한다.
for (int i = 1; i < arData.length; i++) { // arData[0]의 값으로 초기화했기 때문에 i를 1로 초기화한다.
if(max < arData[i]) {
max = arData[i];
}
if(min > arData[i]) {
min = arData[i];
}
}
System.out.println("최대값 : " + max);
System.out.println("최소값 : " + min);
}
}
![](https://blog.kakaocdn.net/dn/dqRBB6/btrt4I5h5T8/NOpFm3EtgHe68xK7Vx3GBk/img.png)
2. 사용자가 입력할 정수의 개수만큼 배열을 만든 후 정수를 입력받고 평균 구하기
import java.util.Scanner;
public class ArTask1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arData = null;
int total = 0;
double avg = 0.0;
System.out.print("입력할 정수의 개수 : ");
arData = new int[sc.nextInt()]; // 입력한 수를 배열의 크기로 선언한다.
for (int i = 0; i < arData.length; i++) {
System.out.print(i + 1 + "번째 정수 : ");
arData[i] = sc.nextInt();
total += arData[i];
}
avg = total / (double)arData.length; // 총합에서 전체 개수를 나누어 평균을 구한다.
// String.format("서식문자", "값, ...") : 서식문자에 들어간 값을 문자열로 바꿔준다.
// 예) String.format("%d", 10) == "10"
// 문자열로 결과가 나오기 때문에 다시 실수로 변경하기 위해서는
// Double 클래스에 있는 parseDouble("문자열")을 사용한다.
// 기존에 있던 avg 값을 서식문자로 변경된 avg 값으로 수정한다.
avg = Double.parseDouble(String.format("%.2f", avg));
for (int i = 0; i < arData.length; i++) {
System.out.print(arData[i]); // 사용자가 입력한 정수를 출력한다.
if(i != arData.length - 1) { // 마지막 반복이 아니라면
System.out.print(", "); // 출력한 정수 뒤에 ", "를 출력한다.
}
}
System.out.println("\n총합 : " + total);
System.out.println("평균 : " + avg);
}
}
![](https://blog.kakaocdn.net/dn/yciyq/btrubuxrZhD/wQaaQclpEkwHNoiP1UVCQ1/img.png)
실습(문자 배열)
1. length()
public class StringTest {
public static void main(String[] args) {
String data = "ABC"; // 3칸짜리 문자 배열
System.out.println(data.length());
}
}
![](https://blog.kakaocdn.net/dn/c2IKAF/btrt7s1HwBT/5o9Uir8XG4tMchNlHMgnXk/img.png)
2. charAt()
public class StringTest {
public static void main(String[] args) {
String data = "ABC"; // 3칸짜리 문자 배열
System.out.println(data.charAt(1));
}
}
![](https://blog.kakaocdn.net/dn/djfb6F/btrt3QWpKfj/ErRBKhWmlpmjkXCPny5tTk/img.png)
3. split()
public class StringTest {
public static void main(String[] args) {
String scores = "10, 20, 30";
// scores.split(",")는 3칸 문자열 배열의 시작 주소이다.
System.out.println(scores.split(", ")[1]);
}
}
![](https://blog.kakaocdn.net/dn/cqXOuW/btrt6fH15L1/3LfwTP0W5y0IdqrHZOxzHk/img.png)
※ 문자열 배열
public class StringTest {
public static void main(String[] args) {
String scores = "10, 20, 30";
String[] arScore = {"10", "20", "30"};
System.out.println(arScore[1]); // scores.split(",")[1]과 같다
// arScore라는 문자열 배열에 위 배열의 시작주소를 대입한다.
// 자료형이 서로 같기 때문에 가능하다.
arScore = scores.split(",");
}
}
![](https://blog.kakaocdn.net/dn/bfym1z/btrt7ukW1m9/96VPc4NV9NEAKXDPQ64Ylk/img.png)
실습(문자열 배열)
1. 사용자에게 입력받은 문자열 중 소문자는 모두 대문자로, 대문자는 모두 소문자로 변경한다.(알파벳이 아닌 문자들은 그대로 유지한다.)
import java.util.Scanner;
public class ArTask2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 아래에서 대입을 한다면 null로 초기화
String str = null;
// 아래에서 연결을 한다면 ""로 초기화
String result = ""; // 대문자 또는 소문자로 변경된 값을 담아줄 변수
System.out.print("문자열 : ");
str = sc.next();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(c >= 65 && c <= 90) {
result += (char)(c + 32);
} else if(c >= 97 && c <= 122) {
result += (char)(c - 32);
} else {
result += c;
}
}
System.out.println("변경된 문자열 : " + result);
}
}
![](https://blog.kakaocdn.net/dn/8UReY/btrubt6nURK/3kWlfJZwaZGicKE7RGxrHk/img.png)
2. 입력한 정수를 한글로 변경한다.
※ 참고
입력 예) 1024
출력 예) 일공이사
//1회차
// 1024 % 10 == 4
// 1024 / 10 == 102
//2회차
//102 % 10 == 2
//102 / 10 == 10
//3회차
//10 % 10 == 0
//10 / 10 == 1
//4회차
//1 % 10 == 1
//1 / 10 == 0
// 몫이 0일 때까지 반복
- 코드
import java.util.Scanner;
public class ArTask2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String hangle = "공일이삼사오육칠팔구";
int num = 0;
String result = "";
System.out.print("정수 : ");
num = sc.nextInt();
while(num != 0) {
result = hangle.charAt(num % 10) + result; // hangle에서 나머지 값과 같은 인덱스에 들어있는 값을 가져온다.
num /= 10;
}
System.out.println(result);
}
}
![](https://blog.kakaocdn.net/dn/bUg2JW/btrua3mzlhF/bsf52jeDEBYgIjSyX7JWsK/img.png)
실습(2차원 배열(1))
public class ArrTest {
public static void main(String[] args) {
int[][] arrData = {
{3, 4, 5, 6},
{8, 9, 0, 9},
{1, 2, 3, 4}
};
System.out.println(arrData); // 주소값
System.out.println(arrData[0]); // 주소값
System.out.println(arrData[0][0]); // 0행 0열의 값
}
}
![](https://blog.kakaocdn.net/dn/b3dlf3/btrt7s8wN75/HkJT9sDefuBPUmnko4ZnX1/img.png)
실습(2차원 배열(2))
1. 2치원 배열의 길이 출력
public class ArrTest {
public static void main(String[] args) {
int[][] arrData = {
{3, 4, 5, 6},
{8, 9, 0, 9},
{1, 2, 3, 4}
};
System.out.println(arrData.length); // 행의 길이
System.out.println(arrData[0].length); // 열의 길이
int length = arrData.length * arrData[0].length; // 전체 길이 = 행의 길이 * 열의 길이
System.out.println(length); // 전체 길이
}
}
![](https://blog.kakaocdn.net/dn/FFZro/btrt5xvLqxS/C3SA9dk10eD4rALnB5zqqk/img.png)
2. 2차원 배열의 모든 값 출력하기
- 이중 for문 사용
public class ArrTest {
public static void main(String[] args) {
int[][] arrData = {
{3, 4, 5, 6},
{8, 9, 0, 9},
{1, 2, 3, 4}
};
for (int i = 0; i < arrData.length; i++) { // 행
for (int j = 0; j < arrData[i].length; j++) { // 열
System.out.print(arrData[i][j] + " ");
}
System.out.println();
}
}
}
![](https://blog.kakaocdn.net/dn/MvATU/btrubvwmUDU/KhPm0xw6tdOY7rOaL1fIIk/img.png)
※ for문과 if문 사용
public class ArrTest {
public static void main(String[] args) {
int[][] arrData = {
{3, 4, 5, 6},
{8, 9, 0, 9},
{1, 2, 3, 4}
};
for (int i = 0; i < length; i++) {
System.out.print(arrData[i / 4][i % 4] + " ");
if((i + 1) % 4 == 0) {
System.out.println();
}
}
}
}
3. 1부터 12까지 각 방에 순서대로 대입한다.(이중 for문을 사용해서 해결한다.)
public class ArrTest {
public static void main(String[] args) {
int[][] arrData = {
{3, 4, 5, 6},
{8, 9, 0, 9},
{1, 2, 3, 4}
};
int count = 0;
for (int i = 0; i < arrData.length; i++) {
for (int j = 0; j < arrData[i].length; j++) {
arrData[i][j] = ++count;
//%02d : 두 자리수로 간격을 맞춰주고, 두 자리수가 아니라면 앞에 0을 붙여준다.
System.out.printf("%02d ", arrData[i][j]);
}
System.out.println();
}
}
}
![](https://blog.kakaocdn.net/dn/xyctR/btrt3gBrnM5/4sXw3SF6JXziBDi94AAPj0/img.png)
'웹 개발 > Java' 카테고리의 다른 글
[Web_JAVA] 12 (0) | 2022.02.26 |
---|---|
[Web_JAVA] 11 (0) | 2022.02.25 |
[Web_JAVA] 09 (0) | 2022.02.23 |
[Web_JAVA] 08 (0) | 2022.02.22 |
[Web_JAVA] 07 (0) | 2022.02.21 |