Javaベース(多次元配列)

4845 ワード

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;ascore[i]=new int[num01]; ...}
説明のかわりに下図を使う
変数を気にしないで、画像の構造を見て、、、

図に示すように、num(行のアドレス値を有する)->num[0](行のインデックスが列のアドレス値を有する)->num[0][0](値を含む)
この構造で保存します.
int[][]score=new int [num][]; 先に明行して、それから
score[i]=new int[num01];for文ではscore[i]の1行目の列に新しい空間範囲を作成できます.
どうしたんですか.各アドレスの値は格納されています.これは、必要に応じて検索してロードする方法です.
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();
		}
	}

}