티스토리 뷰
배열(Array)
1. 1차원 배열
1) 배열의 특징
● 동일한 자료형만 묶어서 저장 가능
//비교) 자바스크립트는 어떤 자료형이나 담을 수 있음.
// [숫자,문자열,객체,배열]
● 생성시 크기를 지정, 이후 크기 변경 할 수 없음
2) 배열의 선언
● 배열 선언시 어떤 자료형을 저장하는 배열인자 여부가 나타나야 함
자료형[] 변수명;
int[] num; // int 배열 자료형 num;
int num[];
- 모든 변수는 stack에 올라간다.
int[] a;
int[] a = null; // 가리키고 있는 객체가 없다.
. 참조자료형의 초기값은 null을 넣어야 함, 숫자를 넣으면 에러
3) 배열의 객체 생성
● 배열 -> 여러 개의 값을 저장할 수 있는 공간
● heap 메모리에 생성
new 자료형[배열의 길이]
● 배열 객체 생성시에는 크기가 지정되어야 함
(int[] a = new int[]; //에러)
// 방법1
int[] a = new int[3];
a[0] = 10;
a[1] = 5;
a[2] = 15;
// 방법2
int[] a;
a = new int[3];
a[0] = 10;
a[1] = 5;
a[2] = 15;
// 방법3
int[] a = new int[]{10,5,15};
// 여기 공간길이 넣으면 안됨
// 뒷쪽 {}에서 모두 알려주기 때문
// 방법4
int[] a = {10,5,15};
// 방법 5
int[] a;
a = new int[]{10,20,30}
주의) int[] a;
a = {10, 20, 30 } 안됨(X)
● new 키워드
○ 'heap 메모리에 넣어라'는 의미
○ jvm이 비워 있는 공간 객체를 생성하고 어느 공간에 넣었는지 알 수 없기 때문에 jvm은 객
체의 위치 정보를 리턴 해 주어야 하고 이것을 담당하는 것이 new
○ 리턴된 값을 참조 변수에 저장(위치 주소)
● stack는 강제 초기화 되지 않음
● heap 메모리는 강제 초기화 됨(jvm이 알아서 초기화 시킴)
○ int - 0, double - 0.0, 참조 자료형(=타입) - null
○ long - 0L, float - 0.0f ....
4) 배열 객체의 값 대입
● 값 대입 : 참조_변수명[인덱스_번호] = 값;
● 값 읽기 : 참조_변수명[인덱스_번호]
○ a[0] = 2;
○ a[1] = 3;
5) 배열의 길이 : 배열명.length
//문자열의 길이 : length()
6) 배열의 출력
● for(int i=0;i<배열명.length;i++)
● Array.toString(배열명); 배열을 문자열로 출력
● 항상된 for문 : for(타입 변수명 : 배열 또는 컬렉션) { 실행문 }
package day05.arrays;
public class ArrayExam01 {
public static void main(String[] args) {
//1. 배열 선언1
int[] a;
a = new int[3];
//2. 값을 대입
a[0] = 10;
a[1] = 20;
a[2] = 30;
//3. 출력
System.out.println("a[0] = " + a[0]);
System.out.println("a[1] = " + a[1]);
System.out.println("a[2] = " + a[2]);
}
}
package day05.arrays;
import java.util.Arrays;
public class ArrayExam2 {
public static void main(String[] args) {
//1. 배열 선언2
int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
/*
for(int i=0; i<3; i++){
System.out.println("arr["+i+"]=" + arr[i]);
}
*/
//arr.length : 배열의 길이
for(int i=0; i<arr.length; i++){
System.out.println("arr["+i+"]=" + arr[i]);
}
System.out.println();
//문자열로 모두 출력
//Arrays.toString(배열명)
System.out.println(Arrays.toString(arr));
}
}

package day06.arrayexam;
import java.text.DecimalFormat;
import java.util.Arrays;
public class ArrayExam02 {
public static void main(String[] args) {
//1. 변수
int[] scores = {90, 89, 50, 35, 99};
int sum = 0;
int max = scores[0], min = scores[0];
double avg = 0.0;
//2. 성적 처리
// 성적 합계, 평균, 최댓값, 최솟값
for(int i=0; i<scores.length; i++){
sum += scores[i];
//최댓값
if(max < scores[i]){
max = scores[i];
}//end if
//최솟값
if(min > scores[i]){
min = scores[i];
}//end if
}//end for
avg = (double)sum / scores.length;
//3. 성적 출력
DecimalFormat f = new DecimalFormat("#,##0.00");
// 패턴 : #,##0.00->천단위 구분기호(,)와
// 소수이하 2자리까지 표현
System.out.println("-----------");
System.out.println("번호 점수");
System.out.println("-----------");
//int[] scores = {90, 89, 50, 35, 99};
for(int i=0; i<scores.length; i++){
System.out.println((i+1) + "\t " + scores[i]);
}//end for
System.out.println("-----------");
System.out.println("총 계: " + sum);
System.out.println("평 균: " + f.format(avg));
System.out.println("최댓값: " + max);
System.out.println("최솟값: " + min);
System.out.println("인원수: " + scores.length);
}//end main
}//end class
package day05.arrays;
public class ArrayExam03 {
public static void main(String[] args) {
int[] num = new int[]{10, 20, 30};
for(int i=0; i<num.length; i++){
System.out.println("num[" + i + "] = " + num[i]);
}
System.out.println("------------------");
int[] score = {89, 90, 75};
for(int i=0; i<score.length; i++){
System.out.println("score[" + i + "] = " + score[i]);
}
System.out.println("------------------");
for(int n : score){
System.out.println(n);
}
}
}
● 문1)
//입력 자료
성적(score) => {100, 88, 100, 90, 50}
이름(name) => {"홍길동","김자바","이자바","박디비","송디비"}
출력형태)
** 중간 성적 **
---------------------
번호 이름 성적
---------------------
1 홍길동 100
2 김자바 88
....
--------------------
전체 인원수 : 5명
전체 합계 : ~~
전체 평균 : ~~
package day05.arrays;
import java.text.DecimalFormat;
/*
성적(score) => {100, 88, 100, 90, 50}
이름(name) => {"홍길동","김자바","이자바","박디비","송디비"}
출력형태)
** 중간 성적 **
---------------------
번호 이름 성적
---------------------
1 홍길동 100
2 김자바 88
....
--------------------
전체 인원수 : 5명
전체 합계 : ~~
전체 평균 : ~~
*/
public class ArrayExam04 {
public static void main(String[] args) {
//int[] score = new int[]{100, 88, 100, 90, 50};
//int[] score;
// score = new int[]{100, 88, 100, 90, 50};
//String[] name = new String[]{"홍길동","김자바","이자바","박디비","송디비"};
//1. 변수 선언과 초기화
int[] score = {100, 88, 100, 90, 50};
String[] name = {"홍길동","김자바","이자바","박디비","송디비"};
int sum = 0;
int counter = 0; //name.length을 사용해도 됨
// 배열의 길이가 곧 인원수가 될 수 있으므로
double avg = 0.0;
//2. 계산 작업(합계, 평균, 인원수)
for(int i=0; i<score.length; i++){
//2-1. 인원수
//counter++; // counter = score.length
//2-2. 합계
sum += score[i]; // sum = sum + score[i];
}
//2-2. 인원수
counter = score.length;
//2-3. 평균
//avg = sum / counter; //정수 / 정수 -> 정수
avg = (double) sum / counter;
//avg=(double) sum /score.length;
//avg=(double) sum /(double)score.length;
//3. 출력
System.out.println("----------------------");
System.out.println("번호\t 이름\t 성적");
System.out.println("----------------------");
for(int i=0; i<name.length; i++){
System.out.printf("%d\t %s\t %d\n", (i+1),name[i],score[i]);
}
System.out.println("----------------------");
//System.out.println("전체 인원수 : " + counter + "명");
//System.out.println("전체 합계 : " + sum + "점");
// System.out.println("전체 평균 : " + avg + "점");
//DecimalFormat f1 = new DecimalFormat("#,##0원");//패턴-문자열
//DecimalFormat f1 = new DecimalFormat("0.00");
DecimalFormat f1 = new DecimalFormat("0명");
DecimalFormat f2 = new DecimalFormat("0.0점");
System.out.println("전체 인원수 : " + f1.format(counter));
System.out.println("전체 합계 : " + sum + "점");
System.out.println("전체 평균 : " + f2.format(avg));
}//end main
}//end class
● 문2) 다음 자료의 최댓값과 최솟값을 구하는 프로그램을 작성하시오.
점수(score) { 79,88,33,100,50,90 }
package day05.arrays;
/*
문2) 다음 자료의 최댓값과 최솟값을 구하는 프로그램을 작성하시오.
점수(score) { 79, 88, 33, 100, 50, 90 }
*/
public class ArrayExam05 {
public static void main(String[] args) {
//1. 변수 선언
int[] score = { 79, 88, 33, 100, 50, 90 };
int max = score[0]; // 첫 번째 요소
// max = 0; //제시된 값들 보다 훨씬 작은 값
// max = Integer.MIN_VALUE; //정수 타입의 최솟값
int min = score[0]; // 첫 번째 요소
// min = 999; //제시된 값들 보다 훨씬 큰 값
// min = Integer.MAX_VALE; // 정수 타입의 최댓값
//2. 최댓값/최솟값 구하기
for(int i=0; i<score.length; i++){
//int[] score = { 79, 88, 33, 100, 50, 90 };
//2-1.최댓값
if(max < score[i]){
max = score[i];
}
//2-2. 최솟값
if(min > score[i]){
min = score[i];
}
}//end for
//3. 출력
System.out.println("최댓값 : " + max);
System.out.println("최솟값 : " + min);
}
}
● 문3) 정수를 하나 입력 받아 그 입력 받은 값과 같은 값이 배열의 몇 번째 요소인지 구하기, 없으면 없다고 출력하기
number = { 79, 88, 33, 100, 50, 90 };
출력형태)
1) 찾는 값 있을 때
찾는 값 : ~~
배열의 요소 위치 : ~~
2) 찾는 값 없을 때
찾은 값이 없습니다.
package day05.arrays;
import java.util.Scanner;
/*
정수를 하나 입력 받아 그 입력 받은 값과
같은 값이 배열의 몇 번째 요소인지 구하기,
없으면 없다고 출력하기
number = { 79, 88, 33, 100, 50, 90 };
출력형태)
1) 찾는 값 있을 때
찾는 값 : ~~
배열의 요소 위치 : ~~
2) 찾는 값 없을 때
찾은 값이 없습니다.
*/
public class ArrayExam06 {
public static void main(String[] args) {
//1. Scanner 객체 생성
Scanner scan = new Scanner(System.in);
//2. 변수 선언과 초기화
int count = 0; //마지막을 점검하기 위한 것
int inputNum = 0;
//3. 배열 선언과 초기화
int[] score = {79, 88, 33, 100, 50, 90};
//4. 숫자 입력받기
System.out.print("정수 입력>> ");
inputNum = scan.nextInt();
//5. 값 찾기
for(int i=0; i<score.length; i++){
//진행 횟수
count++; // count += 1; count = count + 1;
// 값 비교
if(inputNum == score[i]){
System.out.println("찾는 값 : " + score[i]);
System.out.println("배열의 위치 : " + i + "번째 요소");
break; //for 반복을 종료
}//end of if
// 배열 요소를 모두 비교했는지
if(count >= score.length){
System.out.println("찾는 값이 없음");
}//end of if
}//end for
}
}
● 문4) num = {1,2,3,4,5,6,7,8,9,10} 숫자를 임의로 섞어서 출력하는 프로그램 작성
package day05.arrays;
import java.util.Arrays;
// num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
// 숫자를 임으로 섞어서 출력하는 프로그램 작성
public class ArrayExam07 {
public static void main(String[] args) {
//1. 변수선언과 초기화
int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println("변경 전 : " + Arrays.toString(num));
//2. 배열 섞기
for(int i=1; i<=100; i++){
//값 교환할 인덱스 번호
int n = (int)(Math.random()*10);//0 ~ 9, 임의의 인덱스
int temp = 0; //자리 바꿈을 위한 임시 변수
temp = num[0];
num[0] = num[n];
num[n] = temp;
/*
//자리 바꿈의 과정을 확인해 보기
for(int j=0; j<num.length; j++){
System.out.println(num[j] + ",");
}//안쪽 for
System.out.println("자리 바꿈 과정 확인 :" + Arrays.toString(num));
System.out.println();
*/
}//end for
//변경 후 배열
System.out.println("변경 후 : "+Arrays.toString(num));
}
}
● 문5) 로또 번호 출력하는 프로그램 작성하시오.
package day05.arrays;
import java.util.Arrays;
//로또 번호 출력하는 프로그램작성
public class ArrayExam08 {
public static void main(String[] args) {
//1. 배열 공간 45개 확보
int[] lotto = new int[45];
//2. 배열의 요소로 1 ~ 45까지 담기
for(int i=0; i<lotto.length; i++){
lotto[i] = i + 1;
}
//3. 배열 내용을 출력
System.out.println(Arrays.toString(lotto));
//4. 로또 번호 섞기
for(int i=0; i<1000; i++){
//자리 바꿀 인덱스를 무작위로 선정
int n = (int)(Math.random()*45);
int k = (int)(Math.random()*45);
int temp = 0;
//자리 바꿈
temp = lotto[n];
lotto[n] = lotto[k];
lotto[k] = temp;
}//end for
System.out.println(Arrays.toString(lotto));
//로또 번호 출력1
for(int i=0; i<6; i++){
System.out.print(lotto[i] + " ");
}//end for
System.out.println();
//로또 번호 출력2
for(int i=20; i<26; i++){
System.out.print(lotto[i] + " ");
}//end for
System.out.println();
}//end main
}//end class
● 문6) 학생 수와 점수를 입력 받아서, 평균 점수와 최고 점수, 최저 점수를 출력
교재) 224페이지 참조

package day05.arrays;
import java.text.DecimalFormat;
import java.util.Scanner;
public class StudentArray01 {
public static void main(String[] args) {
//1. Scanner 객체 생성
Scanner scan = new Scanner(System.in);
//2. 변수 선언 및 초기화 - 지역 변수(local variable)
int studentCount = 0;//학생수
int[] scores = null;
//배열은 한 번 크기를 설정하면 변경할 수 없음
// null - 아직 참조하는 곳이 없음,
// heap 메모리 영역에 아직 배열 공간이 생성하지 않음
// 그래서 아직은 참조 하지 않는다.ru
//3. 학생수, 점수....
while(true){
String selectNo = null; //selectNo = ""
//3-1. 메시지 반복 처리
System.out.println("----------------------------------------------------------");
System.out.println("1.학생수 | 2.점수입력 | 3.점수 리스트 | 4.분석 | 5. 종료");
System.out.println("----------------------------------------------------------");
System.out.print("번호 선택>> ");
selectNo = scan.nextLine(); //문자열
if(selectNo.equals("5")){
System.out.println("종료 선택");
break; //while 문을 종료
}//end if
if(selectNo.equals("1")){//1.학생수
System.out.print("학생수>> ");
studentCount = Integer.parseInt(scan.nextLine());
//입력받은 학생수로 배열 공간을 확보
scores = new int[studentCount];
}else if(selectNo.equals("2")){//2.점수 입력
//학생수 만큼의 점수를 입력 받기
for(int i=0; i<scores.length; i++){
System.out.print((i+1) + "번 학생 점수 입력>> ");
//입력 받은 점수 배열에 담기
// scores[i] = scan.nextInt();
//scan.nextLine();
scores[i] = Integer.parseInt(scan.nextLine());
}//end for
}else if(selectNo.equals("3")){ //3.점수 리스트
//배열의 내용을 확인
for (int i=0; i<scores.length; i++){
System.out.println((i+1) + "번째 학생 점수 : " + scores[i]);
}//end of for
}else if(selectNo.equals("4")){ //4.분석
int sum = 0;
int max = scores[0];
int min = scores[0];
double avg = 0.0;
//최고 점수, 최저 점수, 합계
for(int i=0; i<scores.length; i++){
sum += scores[i];
if(max < scores[i]){
max = scores[i];
}//end if
if(min > scores[i]){
min = scores[i];
}//end if
}//end for
//평균
avg = (double)sum / studentCount;
//avg = (double)sum / scores.length;
// DecimalFormat f = new DecimalFormat("0.00");
System.out.println("최고 점수 : " + max);
System.out.println("최저 점수 : " + min);
//System.out.println("평균 점수 : " + f.format(avg));
System.out.printf("평균 점수 : %.2f\n", avg);
System.out.println();
}else{ //입력오류
System.out.println("입력 오류");
}//end if
}//end while
System.out.println("프로그램 종료");
}//end main
}//end class
● 문7) 음료를 주문하는 프로그램을 작성하시오.


package day06.arrayexam;
import java.text.DecimalFormat;
import java.util.Scanner;
public class BeverageExam02 {
public static void main(String[] args) {
//1. 입력을 위한 스캐너 객체
Scanner scan = new Scanner(System.in);
//2. 변수 선언 및 초기화 - 음료관련 배열로 처리
//2-1. 음료
String[] beverage = {"아메리카노","라 떼","콜 라","홍 차"};
//2-2 음료 가격
int[] price = {2500, 4500, 1500, 5500};
//2-3. 주문 수량
int[] orderNum = new int[4];
//2-4. 음료별 총 주문 금액
int[] totalMoney = new int[4];
//2-5. 총 결제 금액(= 총 주문액 )
int allAmount = 0;
//2-6. 총 음료 주문 수량
int allOderNum = 0;
//2-7. 금액을 표시하기 위한 패던
DecimalFormat f = new DecimalFormat("#,##0원");
//3. 입력 처리
while(true){
int orderNo = 0;//주문 번호
int orderCount = 0;//주문 수량
int orderYesNo = 0; //주문 진행 여부
System.out.println();
System.out.println("#1. 주문하시겠습니까?");
System.out.println("---------------------------");
System.out.println("1. 주문 계속 | 2. 주문 종료");
System.out.println("---------------------------");
System.out.print("번호 선택>> ");
orderYesNo = scan.nextInt();
if(orderYesNo == 2){
System.out.println("주문 종료 선택하셨습니다.");
break; //while문을 종료
}else if(orderYesNo != 1){
System.out.println("입력 오류, 다시 입력하세요.");
continue; // while문의 조건 부분으로 이동
}//end if
System.out.println();
System.out.println("#2. 음료 번호를 선택하세요...");
System.out.println("---------------------------------------------------------");
System.out.println("1.아메리카노(2500)|2.라떼(4500)|3.콜라(1500)|4.홍차(5500)");
System.out.println("---------------------------------------------------------");
System.out.print("음료 선택>> ");
orderNo = scan.nextInt();
System.out.print("주문 수량 입력>> ");
orderCount = scan.nextInt();
System.out.println();
// 해당 음료의 주문 수량을 누적
//음료 번호는 1부터 시작, 인덱스는 0부터 시작
orderNum[orderNo-1] += orderCount;
}//end while
//4. 계산 처리
for(int i=0; i<beverage.length; i++){
//주문 수량이 없으면 계산할 필요 없음
if(orderNum[i] == 0){
continue; // for의 증감식 부분으로 이동
}//end if
//각 음료별 주문 금액 = 주문수량 * 가격
totalMoney[i] = orderNum[i] * price[i];
//총 결제 금액(총 주문 금액)
allAmount += totalMoney[i];
//총 음료 주문 수량
allOderNum += orderNum[i];
}//end for
//5. 출력 처리
System.out.println();
System.out.println("*** 음료 주문 현황 ***");
System.out.println("------------------------------------------------");
System.out.println("음료명 주문가격 주문수량 주문금액");
System.out.println("------------------------------------------------");
for(int i=0; i<beverage.length; i++){
//주문 수량이 없다는 것은 주문이 없다는 것이므로 출력에서 제외
if(orderNum[i] == 0){
continue;
}//end if
//음료명 주문가격 주문수량 주문금액
System.out.printf("%s\t\t %s\t %d잔\t %s\n",
beverage[i], f.format(price[i]),orderNum[i],
f.format(totalMoney[i]) );
}//end for
System.out.println("------------------------------------------------");
System.out.println("총 주문 수량 : " + allOderNum + "잔");
System.out.println("총 주문 금액 : " + f.format(allAmount));
}//end main
}//end class
2. 2차원 배열
● 가로 및 세로 방향으로 정렬된 배열
● 메모리는 데이터를 1차원으로만 저장 가능
2차원 데이터를 저장하기 위해서는 1차원(행 단위)으로 나누어 저장
1차원 배열을 원소로 가지는 1차원 배열
자료형[][] 변수명 = new 자료형[행의 길이][열의 길이]
int[][] num = new int[2][3];
// 행의길이:2, 열길이:3
int[][] num1 = new int[2][];
// 초기 선언시 행의 길이는 반드시
// 넣어 주어야 하지만
// 열의 길이는 생략 가능, 실제 사용하기
// 전에 열의 길이를 반드시 선언해야 함
int[][] num;
num = new int[2][3];
int[][] num = new int[2][];
num[0] = new int[3];
num[1] = new int[2];
자료형[][] 참조변수명 = new 자료형[][]{{값1, 값2,..,값n}, ...{값1, 값2,..., 값n}}
자료형[][] 참조변수명 = {{값1, 값2,..,값n}, ...{값1, 값2,..., 값n}}
● 배열의 길이 : 행 - 배열명.length
○ 열 - 배열명[행의 인덱스].length
package day06.arrayexam;
import java.util.Arrays;
public class ArrayExam03 {
public static void main(String[] args) {
int[][] scores = {
{100, 20, 40},
{89, 90, 95},
{70, 67, 98}
};
//scores[0][0] = 30;
System.out.println(scores[0][0]); //100
System.out.println(scores[0][1]); //20
System.out.println(scores[0][2]);//40
System.out.println(scores[1][0]); //89
System.out.println(scores[1][1]); //90
System.out.println(scores[1][2]); //95
System.out.println(scores[2][0]); //70
System.out.println(scores[2][1]); //67
System.out.println(scores[2][2]); //98
for(int i=0; i<scores.length; i++){
//System.out.println(scores[i]); //[I@b4c966a,...
for(int k=0; k<scores[i].length; k++){
System.out.println(scores[i][k]);
}//안 for
}//밖 for
}//end main
}//end class
3. 항상된 for문
● 배열이나 컬렉션을 좀 더 쉽게 처리하기 위해 항상된 for 문을 제공
for(타입 변수명 : 배열 또는 컬렉션){
실행문
}
● 문1)
단어 맞추기 게임을 작성하시오.
한글 단어 과일의 이름을 제시하고 영어로 그 뜻을 맞추기
. 한국어 과일 : 사과, 수박, 복숭아, 딸기, 귤
. 영어 과일 : "apple","watermelon", "peach", "strawberry", "tangerine"
=> 2차원 배열
=> String[][] fruits 행의 i번째 열[0]-한글단어, 열[1]-영문단어
fruits[0][0] - 한글 과일이름
fruits[0][1] - 영어 과일 이름
. 질문은 한글로 하기
. 질문에 답 영어로 받기 : String userResponse
. 정답일때 / 오답일때 => if ~ else
=> if(userResponse.equals(fruits[i][1])){
}else{ }
. 반복해서 묻기 : 가지고 있는 단어 범위에서만 반복 => for문, 과일개수
출력형태 )
질문 >> "apple"의 한국어 과일 이름은?
정답일 경우 : 정답입니다.
오답일 경우 : 오답입니다.
정답은 '사과' 입니다.
package day06.arrayexam;
import java.util.Scanner;
public class ArrayExam05 {
public static void main(String[] args) {
//1. 스캐너 객체 생성
Scanner scan = new Scanner(System.in);
//2. 배열 - 과일이름 - 한글, 영어
String[][] fruits = {
{"사과", "apple"},
{"수박", "watermelon"},
{"복숭아", "peach"}
};
//3. 질문과 응답
for(int i=0; i<fruits.length; i++){ //행
//질문에 대한 사용자의 응답
String userResponse = null; //""
System.out.println();
System.out.printf("[질문%d] '%s'에 대한 영문 과일 이름은?\n",
(i+1),fruits[i][0]); //한글
System.out.print("답 >> ");
userResponse = scan.nextLine();
//판단 - 정답인지 오답인지
if(userResponse.equals(fruits[i][1])){//영문
System.out.println("정답입니다.");
}else{
System.out.println("오답입니다.");
System.out.println("정답은 " + fruits[i][1] + "입니다.");
}//end if
}//end for
}//end of main
}//end of class
● 문2)

package day06.arrayexam;
public class ArrayExam04_1 {
public static void main(String[] args) {
//1. 변수 선언과 초기화
int[][] scores = {
{95, 83, 65},
{76, 95, 100},
{45, 80, 99},
{80, 90, 70}
};
int korSum=0, engSum=0, matSum=0, sum=0;
double avg = 0.0;
System.out.println("------------------------------------");
System.out.println("번호 국어 영어 수학 총점 평균");
System.out.println("------------------------------------");
for(int i=0; i<scores.length; i++){//행-개별
//전체 과목별 합계
korSum += scores[i][0];
engSum += scores[i][1];
matSum += scores[i][2];
//번호 -> 행index + 1
System.out.printf("%4d",(i+1));
//System.out.print((i+1) + "\t");
//열
for(int k=0; k<scores[i].length; k++){
//개별 성적 합계
sum += scores[i][k];
//개별 과목 점수 출력
System.out.printf("%5d", scores[i][k]);
}//안 for
System.out.printf("%8d", sum);
// 개별 합계 / 열의 개수
avg = (double) sum / scores[i].length;
System.out.printf("%8.2f\n", avg);
}//밖 for
System.out.printf("총점 : %3d %3d %3d\n",
korSum,engSum,matSum);
}//end main
}//end class
● 문3)

package day06.arrayexam;
import java.util.Scanner;
public class ArrayExam06 {
public static void main(String[] args) {
//1. 스캐너 객체 생성
Scanner scan = new Scanner(System.in);
//2.숫자 입력 받기
System.out.print("숫자 입력>> ");
int num = scan.nextInt(); //행과 열을 결정
//3. 시작
int value = 1;
//4. 출력
for(int i=0; i<num; i++){//행
System.out.print((i+1)+ "=> "); //줄바꿈 안함
for(int k=0; k<num; k++){ //열
System.out.printf("%5d", value);
value += num;
}//안쪽 for
System.out.println();//줄바꿈
}//밖 for
}//end main
}//end class
문 4)

import java.text.DecimalFormat;
import java.util.Scanner;
public class ArrayExam {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//1. 학생 수 입력받기
System.out.print("학생수를 입력>> ");
int studentNum = Integer.parseInt(scan.nextLine());
//2. 이름과 학과 배열공간 확보
String[][] name = new String[studentNum][2];
//3. 성적 점수 입력할 공간 확보
int[][] scores = new int[studentNum][3];
//4. 개별 합계, 평균, 학점, 석차
int[] sum = new int[studentNum];
double[] avg = new double[studentNum];
String[] grade = new String[studentNum];
int[] rank = new int[studentNum];
//5. 학생 수 만큼 이름과 학과를 입력 받기
for(int i=0; i<name.length; i++){
System.out.println("이름과 학과 순서대로 입력 >> ");
for(int j=0; j<name[i].length; j++){
name[i][j] = scan.nextLine();
//확인용 - 나중에 주석 처리
//System.out.println(name[i][j] + "=" + name[i][j] );
}
}
System.out.println();
//6. 성적 입력 받기
System.out.println("성적 입력>> ");
for(int i=0; i<scores.length; i++){
int personalSum = 0;
double personalAvg = 0.0;
rank[i] = 1;
for(int k=0; k<scores[i].length; k++){
scores[i][k] = Integer.parseInt(scan.nextLine());
personalSum += scores[i][k];
}
System.out.println("---------------");
personalAvg = (double) personalSum /scores[i].length;
sum[i] = personalSum;
avg[i] = personalAvg;
//7.학점
if(avg[i] >= 90){
grade[i] = "A";
}else if(avg[i] >= 80){
grade[i] = "B";
}else if(avg[i] >= 70){
grade[i] = "C";
}else if(avg[i] >= 60){
grade[i] = "D";
}else{
grade[i] = "F";
}
}
//8. 석차 구하기
for(int i=0; i<avg.length; i++){
for(int k=0; k<avg.length; k++){
if(avg[i]<avg[k]){
rank[i] +=1;
}
}
}
//9. 출력
DecimalFormat f = new DecimalFormat("#,##0.0");
System.out.println("---------------------------------------------------------------------");
System.out.println("번호\t이름\t학과\tDB\tSW\tPG\t합계\t평균\t학점\t석차");
System.out.println("---------------------------------------------------------------------");
for(int i=0; i<studentNum; i++){
System.out.print((i+1)+"\t");
//이름과 학과
for(int k=0;k<name[i].length; k++){
System.out.print(name[i][k]+"\t");
}
//과목별 성적
for(int j=0; j<scores[i].length; j++){
System.out.print(scores[i][j]+"\t");
}
//합계, 평균, 학점 석차
System.out.println(sum[i]+"\t"+f.format(avg[i])+"\t"+grade[i]+"\t"+rank[i]);
System.out.println();
}
System.out.println();
System.out.println();
System.out.println("-------------------------");
System.out.print("# 개인성적을 보고 싶은 학생의 번호 입력>>");
int no = Integer.parseInt(scan.nextLine());
for(int i=0; i<studentNum; i++) {
//번호는 (i+1)로 처리했으므로, i+1과 입력된 번호가 같은지 체크해서 처리
if((i+1) == no) {
//개인성적표 출력
System.out.println("*** " + name[i][0] + "님의 개인 성적표 ***"); // name[i][0] - 이름, name[i][] - 학과
System.out.println();
//입력받은 학생으이 개인 성적표 자료를 출력하기
System.out.println("================================================================================");
System.out.println("번호\t 이름\t 학과\t DB\t SW\t PG\t 합계\t 평균\t 학점\t 석차");
System.out.println("================================================================================");
//번호
System.out.print((i+1) + "\t ");
//이름과 학과 - 배열에 담아 놓았기에 for사용
for(int j=0; j<name[i].length; j++) {
System.out.print(name[i][j] + "\t ");
}//이름과 학과 for문 끝
//성적 - 배열로 담아 놓음, for
for(int j=0; j<scores[i].length; j++) {
System.out.print(scores[i][j] + "\t ");
}//성적 for문 끝
//합계, 평균, 학점, 석차
System.out.print(sum[i] + "\t " + avg[i] + "\t ");
System.out.print(grade[i] + "\t " + rank[i] + "\t ");
System.out.println();
//해당 학생의 자료를 출력했으면 반복문 빠져나가기
break; //개인 성적 출력이라서
}//end of if
}//밖for문끝
}//end of main
}//end of class