반응형
1. 다차원 배열
- 자바에서는 1차원 배열 뿐만 아니라 2차원 이상의 다차원 배열도 허용한다.
- 2차원 배열의 선언
선언방법 선언예
선언방법 | 선언 예 |
변수타입[][] 변수명; | int[][] arr; |
변수타입[] 변수명[]; | int[] arr[]; |
변수타입 변수명[][]; | int arr[][]; |
int[][] arr = new int[3][4];
arr[0][0] = 10;
//arr.length = > 3;
//arr[1].length => 4;
//arr의 모든방을 출력해보자
반복문
/* System.out.println(arr[0][0]);
System.out.println(arr[0][1]);
System.out.println(arr[0][2]);
System.out.println(arr[0][3]);
System.out.println(arr[1][0]);
System.out.println(arr[1][1]);
System.out.println(arr[1][2]);
System.out.println(arr[1][3]);
System.out.println(arr[2][0]);
System.out.println(arr[2][1]);
System.out.println(arr[2][2]);
System.out.println(arr[2][3]);*/
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();
}
2차원 배열에서 주의할점
int[][] arr = new int[3][]; //3층짜리 아파트는 만들엇으나 각층에 방을 몇개씩할건지는 안정한상태
이것도 오류가 안남. 작은 배열들의 크기가 각각 다를때는 이런식으로 써야함
저거는 {null,null,null}인 상태임. 참조형의 기본값은 null 이니까 (1차원배열 3개인거니까 참조형임)
int[][] arr2 = new int[][]{ {1,2},
{3,4,5},
{6,7,8,9}};
int[][] arr3 = { {1,2},
{3,4,5},
{6,7,8,9}}; //생략가능
new int[][] 생략가능!! 뒤에 값있으면
배열의 모든것! 성적관리
//1. 성적관리 프로그램 만들거임. 6명의 7과목 점수를 저장할 수 있는 변수 score를 선언 및 생성하세요.
int[][] score = new int[names.length][subjects.length];
이걸 이렇게 해줘야 (.length) 이름이나 성적이 늘어나도 커버할수있다
//2. score 각방을 0~100사이의 임의의 정수값으로 변경하여라.
for(int i = 0; i<score.length; i++){
for(int j = 0; j<score[i].length;j++){
score[i][j]=(int)(Math.random()*101);
}
}
//3. 사람 6명 초기화 names
String[] names = new String[]{"송지은","변영운","주사랑","김은지","제갈명","이지완"};
//4. 과목 subjects 7과목 초기화 국영수
String[] subjects = new String[]{"국어","영어","수학","사회","과학","JAVA","Oracle"};
//5. 사람 별 합계 nameSum
int[] nameSum = new int[score.length];
for(int i = 0; i<score.length; i++){
for(int j = 0; j<score[i].length;j++){
nameSum[i]+= score[i][j];
}
}
//사람별 평균 nameAvg 소숫점 두번째자리까지
float[] nameAvg = new float[names.length];
for(int i = 0; i<nameAvg.length;i++){
nameAvg[i] = (int)((float)nameSum[i]/score[i].length*100+0.5)/100F;
}
//과목별 합계
int[] subSum = new int[subjects.length];
for(int i =0; i<score.length; i++){
for(int j = 0; j<score[i].length;j++){
subSum[j]+=score[i][j];
}
}
//과목별 평균
float[] subAvg = new float[subjects.length];
for(int i = 0; i<subAvg.length;i++){
subAvg[i] = (int)((float)subSum[i]/names.length*100+0.5)/100F;
}
//사람별 석차 rank
int[] rank = new int[score.length];
for(int i= 0; i<rank.length;i++){//rank의 길이만큼
rank[i]++;
for(int j = 0; j<rank.length;j++){ //시작값은 i rank의 길이
if(nameSum[i]<nameSum[j]){ //
rank[i]++;
}
}
}
//0. score의 각방의 점수를 아래와 같이 출력하여라
System.out.print("\t");
for(int i = 0; i<subjects.length;i++){
System.out.print(subjects[i]+"\t");
}
System.out.println("합계"+"\t"+"평균"+"\t"+"석차");
for(int i = 0; i<score.length; i++){
System.out.print(names[i]+"\t");
for(int j = 0; j<score[i].length;j++){
System.out.print(score[i][j]+"\t");
}
System.out.println(nameSum[i]+"\t"+nameAvg[i]+"\t"+rank[i]+"등");
}
System.out.print("합계"+"\t");
for(int i = 0; i < subSum.length;i++){
System.out.print(subSum[i]+"\t");
}
System.out.println();
System.out.print("평균"+"\t");
for(int i = 0; i<subAvg.length;i++){
System.out.print(subAvg[i]+"\t");
}
System.out.println();
-------이걸 SORT 해야함 ---------
for(int i = 0; i<score.length-1; i++){
for(int j = 0; j<score.length-1;j++){
if(rank[j]>rank[j+1]){
int temp = rank[j];
rank[j] = rank[j+1];
rank[j+1] = temp;
float temp2 = nameAvg[j];
nameAvg[j] = nameAvg[j+1];
nameAvg[j+1] = temp2;
int temp3 = nameSum[j];
nameSum[j] = nameSum[j+1];
nameSum[j+1] = temp3;
String temp4 = names[j];
names[j] = names[j+1];
names[j+1] = temp4;
for(int x = 0; x<score[j].length;x++){
int temp5 = score[j][x];
score[j][x] = score[j+1][x];
score[j+1][x] = temp5;
}
}
}
}
**마지막 점수정렬
다른 한줄짜리들 (이름이나 합계 평균)들은 한줄만 바꾸면 되는데
점수값은 j값으로 바꿔주는데, 국어 바꿔주고 다음줄로 넘어가서 영어바꿔주고..해야함
그래서 x를 0~과목길이만큼으로 해주고, 한바퀴에 한과목씩 바꿔주는것
여기서 행을 바꾸는거는 j값이 필요하니까 (위아래) 다른것과 마찬가지로 써먹고,
열은 x++(반복)으로 국어다바꾸고 영어다바꾸고 이런식으로..
반응형
'basicJAVA > 4. Array' 카테고리의 다른 글
201016 Array_02 Sort (0) | 2020.10.16 |
---|---|
201015 Array_01 (0) | 2020.10.15 |