자바기초(다차원 배열)

bitna's study note·2022년 3월 30일
0

자바

목록 보기
29/119

3월 30일 내용정리

오늘은 다차원 배열을 입력받아서 출력하기 및 계산하기

package study_0330;

import java.util.Scanner;

public class study_0330 {

	public static void main(String[] args) {
	
		//전체배열개수 행의수 이다.
		
		//문1) 각 학생별로 합계와 평균을 구하여라.
		
		/*int[][]score= {{75,85,70},{85,95,85},{60,55,40},{55,65,60}};
	
		
		for(int i=0;i<score.length;i++) {
			System.out.print((i+1)+"번 ");
			int sum=0;
			double avg=0.0;
			
			for(int k=0;k<score[i].length;k++) {
				System.out.print(score[i][k]+" ");
				sum+=score[i][k];
			}
			avg=sum/score[i].length;
			
			System.out.println(sum+" "+avg);
		}*/
		
		//문2)이번에는 입력하여 각 학생별로 합계와 평균을 구하여라.
		/*int[][]score=new int [2][3];  ========>내가푼 방법
		
		
		Scanner scan=new Scanner(System.in); 
		
		for(int i=0;i<2;i++) {
			int sum=0;
			double avg=0.0;
			
			for(int j=0;j<3;j++) {
			System.out.println(i+1+"번째 학생점수를 입력하세요");
				int num=scan.nextInt();
				score[i][j]=num;
				sum+=score[i][j];
				
				classScore=score[0][j]+score[1][j];
				
				}
			avg=sum/score[i].length;
			System.out.println(i+1+"번째 학생점수입력완료");
			System.out.println(i+1+"번째 총합계:"+sum+" 평균:"+avg);
			System.out.println();
			}*/
		
		
		/*int[][]score=new int [2][3]; ========>선생님이 푼방법 및 응용
		Scanner scan=new Scanner(System.in); 
		
		
		for(int i=0;i<2;i++) {
			System.out.println(i+1+"번학생 국어점수를 입력하세요");
			score[i][0]=scan.nextInt();
			System.out.println(i+1+"번학생 영어점수를 입력하세요");
			score[i][1]=scan.nextInt();
			System.out.println(i+1+"번학생 수학점수를 입력하세요");
			score[i][2]=scan.nextInt();
			System.out.println();
		}
		
		for(int i=0;i<2;i++) {
			int sum=0;
			double avg=0.0;
			
			for(int j=0;j<3;j++) {
				
				sum=sum+score[i][j];
			}
			avg=(double)sum/score[i].length;
			System.out.println(i+1+"번학생 총합:"+sum+" 평균:"+avg);
		}*/
		
		//문3   학급 수, 각 학급의 학생 수, 그리고 모든 학생의 점수를 읽어서 합계와 평균을 구하기
		// 합계와 평균은 학급 단위와 전교생 단위
		/* 출력형태
		 * 
		 *   //입력 묻기
		 *    학급 수 : 2(숫자입력 )
		 *    
		 *    1반의 학생 수 : 정수입력(3)
		 *    1반 1번의 점수 : 점수입력(50)
		 *    1반 2번의 점수 : 점수입력(63)
		 *    1반 3번의 점수 : 점수입력(72)
		 *    
		 *    2반의 학생 수 : 정수입력(2)
		 *    2반 1번의 점수 : 점수입력(79)
		 *    2반 2번의 점수 : 점수입력(43)
		 *   
		 *    //결과 출력
		 *     반   합계   평균
		 *    ================
		 *    1반   185    61.7
		 *    2반   122    61.0
		 *    =================
		 *    총계  307    61.4
		 * 
		 */
		
		
		Scanner scan=new Scanner(System.in); 
		System.out.println("학급수를 입력하세요");
		int num=scan.nextInt();
		
//중요!!! int[][]score=new int [num][]; 먼저 행(열의 값을 가지고있는 주소값)을 선언
		
		
		for(int a=0;a<num;a++) {
		
		 System.out.println("학생수를 입력하세요");
		 int num01=scan.nextInt();
		 
//중요!!! score[i]=new int[num01]; 위에 선언한 행의 주소값이 가르키고있는 열로가서 공간을 만들어라의 의미
//행먼저 선언해줄수 있음을 기억!!!		 
		 int[][]score=new int [num][num01];
		 
		 
		 int sum=0;
		 double avg=0.0;
		
			for(int i=0;i<num01;i++) {
				System.out.println((a+1)+"반의"+(i+1)+"번째학생 점수를 입력하세요");
				int jumsu=scan.nextInt();
				score[a][i]=jumsu;
				
				sum=sum+score[a][i];
		 } 
		avg=(double)sum/score[a].length;
		System.out.println("총합은:"+sum+"평균은:"+avg);
		System.out.println();
	  
	}
	
		
				
		
	}
}

오늘 쌤이 내준 문제에서 이해 안됐던 부분이
왜? 다차원 배열을 선언할때 나눠서 선언했는데도 성립이 되는거징?!
의문이 있었음

위 문제중에 바로 아랫부분!!
int[][]score=new int [num][];
for(int a=0;a<num;a++) {
score[i]=new int[num01]; ...}

이거슨 아래 그림으로 설명을 대신함
변수는 신경 쓰지말고 그림 구조를 봐주시길,,,

그림을 보면 num(행에대한 주소값 가짐)->num[0] (행의인덱스는 열에대한 주소값을 가짐)->num[0][0](값이 담겨있음)

이런 구조로 저장이 되어 있어
int[][]score=new int [num][]; 행을 먼저 선언해준후에
score[i]=new int[num01];for문안에서 score[i]번째 행의 열의 새로운공간범위를 만들어 줄수 있음
왜?? 각각 주소값이 저장되어있어 필요할때 찾아가서 불러오는 방식이므로...

package study_0330;

import java.util.Scanner;

public class study_0330_01 {

	public static void main(String[] args) {
		// 문4) 행의 개수를 받고 열의 개수를 받아서 출력하기
		Scanner scan=new Scanner(System.in); 
		System.out.println("행의 개수를 입력하세요.");
		int row =scan.nextInt();
		int [][]modu =new int[row][]; //먼저 행(열의 값을 가지고있는 주소값)을 선언, 행먼저 선언해줄수 있음을 기억!!!	
		
		
		for(int i=0;i<modu.length;i++) {
			System.out.println((i+1)+"번째행의 열의 개수를 입력하세요.");
			int col =scan.nextInt();
			modu[i]=new int[col]; //위에 선언한 modu[i]번째 행이 저장한 주소값이 가르키고있는 열의 새로운 공간을 만들어라의 의미
			
			for(int j=0;j<modu[i].length;j++) {
				System.out.println((i+1)+"번째행의"+(j+1)+"열의 값를 입력하세요.");
				int colNum =scan.nextInt();
				modu[i][j]=colNum;
			}
		}
		
		for(int i=0;i<modu.length;i++) {
			System.out.print((i+1)+"행 출력");
			for(int j=0;j<modu[i].length;j++) {
				System.out.print(modu[i][j]+" ");
			}
			System.out.println();
		}
	}

}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

Powered by GraphCDN, the GraphQL CDN