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();
}
}
}