[Java] 2차원 배열 문제
1. 국어점수,영어점수 3번씩 입력받아 이차원배열의 각 행에 저장하고, 마지막 열에는 평균 저장
public void method6_1() {
//Scanner이용 국어점수, 영어점수 3번 찍어서 평균을 구하시오.
//double[][] arr = new double[2][4];
Scanner sc = new Scanner(System.in);
double[][] arr = new double[2][4];
int arrIlght = 0; //각 행의 열의 길이
for(int i=0; i<arr.length; i++) {
double sum =0; //int로 하면 안됨
c_length = arr[i].length-1;
for(int j=0; j<arr[i].length-1; j++) { //0,1,2열 (3열X)
if(i==0) {
System.out.print("국어점수 : ");
}else {
System.out.print("영어점수 : ");
}
arr[i][j] = sc.nextDouble();
sum += arr[i][j];
}
arr[i][arrIlght] = sum;
System.out.println("합 ---> " + arr[i][arrIlght]);
}
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
DecimalFormat f1 = new DecimalFormat("0.00"); //반환되는 타입 -> String
System.out.println("국어점수 평균 : " + arr[0][arrIlght]/arrIlght);
System.out.println("영어점수 평균 : " + arr[1][arrIlght]/arrIlght);
System.out.println("영어점수 평균 : " + f1.format(arr[1][arrIlght]/arrIlght));
}
1)
for ( int j=0; j<arr[i].length-1 ; j++ ) {
if ( i==0 ) {
System.out.print( "국어점수 : " )
} else {
System.out.print( "영어점수 : " )
}
arr[i][j] = sc.nextDouble();
sum += arr[i][j];
}
→ 0번째 행에국어점수입력, 1번째 행에 영어점수 입력문장 출력후 arr[ i ][ j ]에 sc.nextDouble()을 대입하는 것은 똑같다.
2)
DecimalFormat f1 = new DecimalFormat("0.00");
System.out.println("영어점수 평균 : " + f1. format( arr[1][ arrIlght ] / arrIlght ) );
→ f1.format(숫자) : 위에 f1을 정의할 때와 같이 소수점 둘째짜리(*.**)까지 나타내준다.
2. 3행 3열 이차원 배열에 1~10사이 랜덤값 중복없이 저장
public void method7() {
//1~10사이의 랜덤값을 3행 3열에 값을 넣으려고 한다.
//중복을 제거해서 넣어보세요
//1.1차원배열(arr1)에 랜덤값 9개 저장하기
int[] arr1 = new int[9]; //3행 3열 총 9개에 넣기 때문에 9개로 한다. (10개아님)
for(int i=0; i<arr1.length; i++) {
arr1[i] = (int)(Math.random()*10+1);
for(int j=0; j<i; j++) {
if(arr1[i] == arr1[j]) {
i--;
break;
}
}
}
//2. 2차원배열(arr2) 생성 -> 기존배열 arr1에서 값 가져와서 저장
int[][] arr2 = new int[3][3];
int num =0; //1차원 배열의 0번부터 마지막 인덱스까지 접근하기 위한 변수
for(int i=0; i<arr2.length; i++) {
for(int j=0; j<arr2[i].length; j++) {
arr2[i][j] = arr1[num++];
}
}
//3. arr2 값 출력
for(int i=0; i<arr2.length; i++) {
for(int j=0; j<arr2[i].length; j++) {
System.out.print(arr2[i][j] + " ");
}
System.out.println();
}
}
3. 빙고 게임
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--;
break;
}
}
}
int[][] arr = new int[5][5];
int index =0;
//arr[5][5] 이차원 배열에 랜덤값 넣기
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
arr[i][j] = temArr[index++];
}
}
//arr[5][5] 출력
for(int i=0; i < arr.length ; i++) {
for(int k=0; k < arr[i].length; k++) {
System.out.printf("%4d",arr[i][k]);
}
System.out.println();
}
//===================================================================================
int count =0; //숫자 입력한 횟수 저장을 위해서 만든 변수
System.out.println("========빙고게임시작========");
while(true) {
System.out.print("정수를 입력하세요 : ");
int num = sc.nextInt();
sc.nextLine();
count++; //입력횟수 1증가
//입력한 숫자와 배열[][]값 중 같은 것 있는지 찾기
for(int i=0; i<5; i++) {
for(int k=0; k<5; k++) {
if(arr[i][k] == num) {
arr[i][k] = 0; //일치하는 위치에 0으로 표시
}
System.out.printf("%4d",arr[i][k]);
}
System.out.println();
}
System.out.println("게임을 끝내시겠습니까(y/n) : ");
char ch = sc.nextLine().toUpperCase().charAt(0);
if(ch == 'Y') {
break;
}
}
System.out.println(count + "번 입력하였습니다.");
}
1)
for(int i=0; i<5; i++) { ▶ 행 반복
for(int k=0; k<5; k++) { ▶ 열 반복
if(arr[i][k] == num) {
arr[i][k] = 0; //일치하는 위치에 0으로 표시
}
System.out.printf( " %4d ", arr[ i ][ k ]); ▶열이 반복될때 마다 출력(1행일 경우 0,1,2,3,4행)
}
System.out.println(); ▶열 반복끝난후 엔터로 한줄띄우고 행 증감(i++)
}
2) char ch = sc.nextLine().toUpperCase().charAt(0);
→ 사용자가 y를 입력하든 Y를 입력하든 문제없도록 하기 위해 모두 'Y'로 바꿔주어 비교한다.