basicJAVA/4. Array

201020 Array_03

unemo 2020. 10. 20. 08:41
반응형

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