기본 이차 배열의 구조와 초기화는 다음과 같이 할 수 있다.
public void method2() {
int[][] arr = new int[3][5];
// 1 2 3 4 5
// 6 7 8 9 10
// 11 12 13 14 15
// 값 기록
// 1. 인덱스에 접근하여 값기록
/*
* arr[0][0] = 1; arr[0][1] = 2; arr[0][2] = 3; arr[0][3] = 4; arr[0][4] = 5;
*
* arr[1][0] = 6; arr[1][1] = 7; arr[1][2] = 8; arr[1][3] = 9; arr[1][4] = 10;
*
* arr[2][0] = 11; arr[2][1] = 12; arr[2][2] = 13; arr[2][3] = 14; arr[2][4] =
* 15;
*/
// 2.중쳡 for 문이용하여 값 기록
int value = 1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = value++;
}
}
for (int i = 0; i < arr.length; i++) { // 행 3
for (int j = 0; j < arr[i].length; j++) { // 열 5개
System.out.printf("%2d", arr[i][j]);
}
System.out.println(); // 개행
}
}
사용자에게 값을 받아 활용하는 메소드
public void method6() {
// 국어 점수 영어 점수 3번찍어서 평균을 구해보세요
// double 형을 받으세요 double[][] arr = new double[2][4];
double[][] arr = new double[2][4];
Scanner sc = new Scanner(System.in);
int arrILgth = 0;
// 배열 길이를 초기화
for (int i = 0; i < arr.length; i++) { // 배열 (행) 이 늘어 나는 동안
double sum = 0;
// 변수 합을 담아 둘 수 있는 초기화 해서 갖고 있고
arrILgth = arr[i].length - 1;
for (int j = 0; j < arrILgth; j++) { // 열 이 늘어나는 동안 각 과목의 점수를 담을 수 있도록 // 어차피 3회민 됨// 길이가 3으로 설정
// length -1 : 해서 4열에서 3열로 줄여 놓음
if (i == 0) { // 첫 행이 0라면, 국어점수를 담고
System.out.println("국어점수 : ");
} else { // 아니라면 영어점수를 담고
System.out.println("영어점수: ");
}
arr[i][j] = sc.nextDouble();
// [0,0],[0,1],[0,2]
// [1,0],[1,1],[1,2]
//값을 답아서 다 더하면 합계이니
sum += arr[i][j];
}
// 마지막 열에 다 합친 값을 담아줌
arr[i][arrILgth] = sum;
System.out.println("합 ---->" + arr[i][arrILgth]);
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(" arr[ " + i + "][" + j + "] " + arr[i][j]);
}
System.out.println();
}
DecimalFormat f1 = new DecimalFormat("0.00");
System.out.println("국어점수 평균 : " + arr[0][arrILgth] / arrILgth);
System.out.println("영어점수 평균 : " + arr[1][arrILgth] / arrILgth);
System.out.println("국어점수 평균 : " + f1.format(arr[0][arrILgth] / arrILgth));
System.out.println("영어점수 평균 : " + f1.format(arr[1][arrILgth] / arrILgth));
}
랜덤값 구해서 이중 배열 구조에 넣어보기
public void method7() {
// 1부터 10까지 랜덤 값을 3행 3열 값을 넣으려고 한다
// 중복을 제거해서
// 1차원 배열로 중복 제거한 9 개 값으 구해 놓고 --> 2차원으로
// int[][] arr = new int[3][3];
int[] iArr = new int[9];
for (int i = 0; i < iArr.length; i++) {
iArr[i] = (int) (Math.random() * 10 + 1);
for (int j = 0; j < i; j++) {
if (iArr[i] == iArr[j]) {
i--;
break;
}
}
}
int[][] newArr = new int[3][3]; // 행 열 값을 초기화 세팅 하고
int index = 0; // 1차원 for 문에 접근하기 위해 초기값 세팅
for (int i = 0; i < newArr.length; i++) { // 새로 배열한 2차원 배열 값대로 순차적으로 행으로 접근 먼저하고
for (int j = 0; j < newArr[i].length; j++) { // 그 안쪽으로 열 값대로 순차적으로 진행하면서
newArr[i][j] = iArr[index++]; // 그동안 각 주소에 1차 for 문에서 구한 인덱스 값을 하나씩 ++ 하면서 가져 옵니다.
}
}
for (int i = 0; i < newArr.length; i++) { // 출력을하기 위해 새로 배정한 행 값에 진행에 따라
for (int j = 0; j < newArr[i].length; j++) { // 열값 배정에 따라
System.out.print(newArr[i][j] + " "); // (0,0) > 위치한 값을 넣고 (0,1)에 있는 값을 넣고 ... 계속진행
}
System.out.println(); // 행마다 주소값 // 개행
}
}
이중 배열을 통한 빙고게임 메소드
// 빙고게임
public void bingo() {
Scanner sc = new Scanner(System.in);
// 1차원 배열로 중복을 제거한 25개의 값을 구하고
int[] temArr = new int[25];
for (int i = 0; i < temArr.length; i++) {
temArr[i] = (int) (Math.random() * 25 + 1);
for (int j = 0; j < i; j++) {
if (temArr[i] == temArr[j]) {
i--; // 중복 제거를 위해 i 값으 다시 받기위해 마이너스 해서 다시 아웃 for 문으로 이동
break;
}
}
}
int[][] arr = new int[5][5]; // 이차배열 함수로 구조를 나눠주고...
int index = 0; // 위 배열을 가져와야 함( 1차원 1 부터 25 값 가져와요)
for (int i = 0; i < 5; i++) { // 행이 5까지 돌 동안
for (int j = 0; j < 5; j++) { // 열도 5까지 돌 동안
arr[i][j] = temArr[index++]; // 각각의 담을 숫자들을 하나씩 담아요~
}
}
for (int i = 0; i < arr.length; i++) { // 5행 5 열 배열로 담기 위한 for 문과 출력문
for (int j = 0; j < arr[i].length; j++) {
System.out.printf("%4d", arr[i][j]);
}
System.out.println();
}
int count = 0; /// 정수 값을 받기 위해 변수를 세팅
System.out.println("===빙고게임시작===");
while (true) {
System.out.println("정수입력 : ");
int num = sc.nextInt();
sc.nextLine();
count++; // 정수를 입력하는 횟수를 기록하기 위한것
for (int i = 0; i < 5; i++) { // 이중 for 문으로 각 행과 각 열을 확인하며 정수 비교
for (int j = 0; j < 5; j++) {
if (arr[i][j] == num) {
arr[i][j] = 0; // 일치하는 번호 0으로 표기
}
System.out.printf("%4d", arr[i][j]); // 매칭이 되면 0 으로 표기하는 출력문 작성
}
System.out.println(); // 개행
}
System.out.println("게임을 끝내시겠습니까? (Y/N)");
char ch = sc.nextLine().toUpperCase().charAt(0);
if (ch == 'Y') {
break; // 게임끝내서 for문을 나올 수 있게
}
System.out.println(count + "번 입력");
}
}
'자바 한계단' 카테고리의 다른 글
자바 구성멤버 [메소드] (0) | 2021.09.27 |
---|---|
자바 생성자 복습 (0) | 2021.09.26 |
필드부 복습 (0) | 2021.09.24 |
클래스 복습 (0) | 2021.09.24 |
자바 객체 지향 프로그래밍 (0) | 2021.09.24 |