Java/정리

[Java] 2차원 배열 문제

콧등치기국수 2021. 5. 12. 13:35

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'로 바꿔주어 비교한다.