公費日08:多次元配列



🌟例1🌟


浅い放射線の特徴
Heap領域のデータはプログラムが終了するまで生存します.
public class Test01 {
	public static void main(String[] args) {
		int[] a;	// 배열의 주소를 기억할 변수
		{
			int[] b;
			// b변수는 블록 안에서 만들어진 변수이므로 블록을 벗어나면 사라지는 변수
			b = new int[5];
			// new라는 명령으로 Heap에 배열을 만들고
			// 변수에 기억시켰지만 이 블록이 닫히는 순간
			// 사라지게 되므로 더 이상 이 배열을 사용할 수 없게 된다.
				
			b[2] = 500;
				
			// 얕은 복사
			a = b;
				
			a[2] = 1000;	
      		// 복사가 되서 a에 들어가는게 아니라 둘이 리터럴이 저장된 주소를 공유
			System.out.println("b[2] : " + b[2]);
            // 따라서 a에서 값을 변경했기 때문에 b에서도 값이 바뀐다.
		}
	}
}

🌟例2🌟


5個の整数を格納する配列を作成し、データを埋め込みます.
異なる配列では、インデックス1からインデックス3までのデータのみが深度コピーされます.
import java.util.Arrays;
public class Test02 {
	public static void main(String[] args) {
		// origin
		int[] ori = {10, 20, 30, 40, 50};
		
		// toCopy
		int[] copy = new int[10];
		
		// 깊은 복사
		System.arraycopy(ori, 0, copy, 0, 3);
		// 가져올 배열, 복사를 시작할 위치, 저장할 배열, 복사 받는걸 시작할 위치, 데이터의 수
		
		//배열 내용 출력
		System.out.println("ori : " + Arrays.toString(ori));
		System.out.println("ori : " + Arrays.toString(copy));
	}
}

🌟例3🌟


「Potato Freed」という文字列の変数strを作成します.
1.Potato出力のみ抽出
2.Freedのみ抽出して出力する
public class Test03 {
	public static void main(String[] args) {
		// 문자열 변수
		String str = "Potato Fried";
		
		// 잘라낸 단어를 기억할 변수
		String word1, word2;
		// 필요 없는 데이터를 할당할 필요는 없기에 ""로 초기화를 하지 않는것
		
		// Potato
		int idx1 = str.indexOf(' ');
        // 문자열 중 특정문자의 위치값을 알려주는 함수
		word1 = str.substring(0, idx1);
		
		// Fried
		word2 = str.substring(str.indexOf('F'));
		
		// 출력
		System.out.println(word1);
		System.out.println(word2);
	}
}

🌟例4🌟


3人の学生
java、db、web、jsp、springスコアを記憶する配列を作成します.
各レッスンのスコアをランダムに入力と出力に設定
public class Test04 {
	public static void main(String[] args) {
		// 3명의 학생의 5과목 점수 배열
		int[][] stud = new int[3][5];
		
		// 과목 점수 입력
		for(int i = 0 ; i < stud.length ; i++) {
			for(int j = 0 ; j < stud[i].length ; j++) {
				// 과목 점수 랜덤하게 입력
				stud[i][j] = (int)(Math.random() * 41 + 60);
			}
		}
		for(int[] st : stud) {
			for(int sub : st) {
				System.out.print(sub + " | ");
			}
			System.out.println();
		}
		
		// 총점 구하기
		int[] total = new int[3];
		
		for(int i = 0 ; i < stud.length ; i++) {
			for(int j = 0 ; j < stud[i].length ; j++) {
				total[i] += stud[i][j];
			}
		}
		
		for(int t : total) {
			System.out.println("### " + t);
		}
	}
}

練習問題


👑練習問題1👑


5科7学生,科目総得点と学生総得点
平均を計算して降順で出力する
import java.util.Arrays;
public class Ex01 {

	public static void main(String[] args) {
		// 5과목 7학생 배열
		int[][] subj = new int[6][8];
		
		// 랜덤 점수 채워넣기
		for(int i = 0 ; i < subj.length - 1 ; i++) {
			for(int j = 0 ; j < subj[i].length - 1 ; j++) {
				// 각각의 마지막은 총점 자리니까 - 1
				// i 과목의 j학생 점수
				subj[i][j] = (int)(Math.random() * 41 + 60);
				
				// 과목 총점 더하기
				subj[i][subj[i].length - 1] += subj[i][j];
			}
		}
		
		// 학생 총점 계산
		for(int i = 0 ; i < subj.length - 1 ; i++) {
			for(int j = 0 ; j < subj[i].length - 1 ; j++) {
				subj[subj.length - 1][j] += subj[i][j];
			}
		}
		
		// 평균 계산
		double[] subAvg = new double[5];
		double[] stuAvg = new double[7];
		for(int i = 0 ; i < subAvg.length ; i++) {
			// subAvg는 학생 수로 나눠야함
			subAvg[i] = subj[i][stuAvg.length] / (double) stuAvg.length;
			for(int j = 0 ; j < stuAvg.length ; j++) {
				if(i > 0) {
					break;
				}
				// stuAvg는 과목 수로 나눠야함
				stuAvg[j] = subj[subAvg.length][j] / (double) subAvg.length;
			}
		}
		
		// 점수 출력
		for(int[] s : subj) {
			System.out.println(Arrays.toString(s));
		}
		
		// 평균 출력
		for(int i = 0 ; i < subAvg.length ; i++) {
			System.out.print((char)('a' + i) + "과목 평균 : ");
			System.out.printf("%.1f | ", subAvg[i]);
		}
		System.out.println();
		for(int i = 0 ; i < stuAvg.length ; i++) {
			System.out.print((char)('A' + i) + "학생 평균 : ");
			System.out.printf("%.1f | ", stuAvg[i]);
		}
		
		// 내림차순
		// 학생을 석차순으로 저장할 배열
		char[] std = new char[7];
		// 학생 이름 채우기
		for(int i = 0 ; i < std.length ; i++) {
			std[i] = (char)('A' + i);
		}
		// 학생 평균을 비교해 정렬
		for(int i = 0 ; i < stuAvg.length ; i++) {
			double noTmp;
			char chTmp;
			
			for(int j = 0 ; j < i ; j++) {
				if(stuAvg[i] > stuAvg[j]) {
					noTmp = stuAvg[i];
					stuAvg[i] = stuAvg[j];
					stuAvg[j] = noTmp;
					chTmp = std[i];
					std[i] = std[j];
					std[j] = chTmp;
				}
			}
		}
		System.out.println();
		// 석차 출력
		for(int i = 0 ; i < std.length ; i++) {
			System.out.print((i + 1) + "위 " + std[i] + "학생 | "); 
		}
	}
}