//시험성적프로그램 국영수 성적 자료형
package ex03;
//1. 데이터 구조 정의
public class Exam {
//2. 선언(참조형 : 기본형외 / 값형식 : 기본자료형)
int kor;
int eng;
int math;
}
//시험성적자료형배열, 현재길이
package ex03;
public class ExamList {
Exam[] exams;
int current;
}
//3명 이상의 국영수 성적 입출력 프로그램
package ex03;
import java.util.Scanner;
public class ListProgram {
public static void main(String[] args) {
ExamList list = new ExamList();
list.exams = new Exam[3];
list.current = 0;
int menu;
boolean keepLoop = true;
while(keepLoop)
{
menu = inputMenu();
switch(menu)
{
case 1:
inputList(list);
break;
case 2:
printList(list);
break;
case 3:
System.out.println("Bye~~");
keepLoop = false;
break;
default:
System.out.println("잘못된 값을 입력하셨습니다. 메뉴는 1~3까지입니다.");
}
}
}//main()
private static void printList(ExamList list) {
System.out.println("┌────────────────────────┐");
System.out.println(" │ 성적출력 │");
System.out.println("└────────────────────────┘");
System.out.println();
int count = list.current;
Exam[] exams = list.exams;
for(int i=0; i<count; i++) {
Exam exam = exams[i];
int kor = exam.kor;
int eng = exam.eng;
int math = exam.math;
int total = kor + eng + math;
float avg = total/3.0f;
System.out.printf("%d번 학생\n",i+1);
System.out.printf("\t국어 : %3d\n", kor);
System.out.printf("\t영어 : %3d\n", eng);
System.out.printf("\t수학 : %3d\n", math);
System.out.println("-----------------------");
System.out.printf("\t총점 : %3d\n",total);
System.out.printf("\t평균 : %6.2f\n",avg);
System.out.println("────────────────────────");
}
}//printList
private static void inputList(ExamList list) {
Scanner scan = new Scanner(System.in);
System.out.println("┌────────────────────────┐");
System.out.println(" │ 성적입력 │");
System.out.println("└────────────────────────┘");
System.out.println();
int kor, eng, math;
System.out.printf("%d번 학생\n",list.current+1);
do {
System.out.printf("국어 : ");
kor = scan.nextInt();
if(kor<0 || 100<kor)
System.out.println("입력오류 : 성적유효범위에 맞게 입력하세요.");
} while(kor<0 || 100<kor);
do {
System.out.printf("영어 : ");
eng = scan.nextInt();
if(eng<0 || 100<eng)
System.out.println("입력오류 : 성적유효범위에 맞게 입력하세요.");
} while(eng<0 || 100<eng);
do {
System.out.printf("수학 : ");
math = scan.nextInt();
if(math<0 || 100<math)
System.out.println("입력오류 : 성적유효범위에 맞게 입력하세요.");
} while(math<0 || 100<math);
Exam exam = new Exam();
exam.kor = kor;
exam.eng = eng;
exam.math = math;
Exam[] exams = list.exams;
int count = list.current;
if(list.exams.length == list.current) { //list.exams 배열의 길이가 현재 list.current와 같다. 즉 exams의 공간이 없다면.
// 1. 크기가 5개 정도 더 큰 새로운 배열을 생성하시오.
Exam[] temp = new Exam[list.exams.length + 5]; //8개. 다쓰면 또 +5개
// 2. 값을 이주시키기
for(int i=0; i<count; i++)
temp[i]=exams[i];
// 3. list.exams가 새로만든 temp 배열을 참조 할 수 있도록 한다.
list.exams = temp;
}
list.exams[list.current] = exam;
list.current++;
System.out.println("────────────────────");
}//inputList()
static int inputMenu() {
Scanner scan = new Scanner(System.in);
System.out.println("┌──────────────────┐");
System.out.println("│ 메인 메뉴 │");
System.out.println("└──────────────────┘");
System.out.println("\t1. 성적입력 ");
System.out.println("\t2. 성적출력 ");
System.out.println("\t3. 종료 ");
System.out.println("\t선택> ");
int menu = scan.nextInt();
return menu;
}//inputMenu()
}
Exam[] exams = list.exams;
int count = list.current;
if(list.exams.length == list.current) { //list.exams 배열의 길이가 현재 list.current와 같다. 즉 exams의 공간이 없다면.
// 1. 크기가 5개 정도 더 큰 새로운 배열을 생성하시오.
Exam[] temp = new Exam[list.exams.length + 5]; //현재크기만큼 다 사용했다면 추가로 5개 생성된다.
// 2. 값을 이주시키기
for(int i=0; i<count; i++)
temp[i]=exams[i];
// 3. list.exams가 새로만든 temp 배열을 참조 할 수 있도록 한다.
list.exams = temp;
}
최소한의 배열의 크기를 3으로 만들어 준 후 추가적으로 더 필요한 5개의 크기는 if문을 통해 만들어 줬다.
배열의 길이가 현재사용한 길이와 같으면 더이상의 공간이 없다는 뜻이다.
그럼 그 때 더 필요한 크기만큼 더해서 새로운 배열을 생성해준다.
현재까지 받은 값을 새로운 배열로 옮겨준다.
기존에 배열이 새로만든 배열을 참조 할 수 있도록 한다.
배열의 크기만큼 다 사용하고 나면 배열의 크기를 5개 늘려줘서 계속적으로 학생성적을 입력 할 수 있게 됐다.
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[JAVA] 캡슐화 - 국영수 성적 입출력 프로그램 (0) | 2021.11.28 |
---|---|
[JAVA] 함수 Overloading - 국영수 성적 입출력 프로그램 (0) | 2021.11.25 |
[JAVA] 구조적인 프로그래밍 (0) | 2021.11.24 |
[JAVA] 자바의 입출력 (0) | 2021.11.21 |
[JAVA] 자바의 연산자와 제어문 (0) | 2021.11.21 |
//시험성적프로그램 국영수 성적 자료형
package ex03;
//1. 데이터 구조 정의
public class Exam {
//2. 선언(참조형 : 기본형외 / 값형식 : 기본자료형)
int kor;
int eng;
int math;
}
//시험성적자료형배열, 현재길이
package ex03;
public class ExamList {
Exam[] exams;
int current;
}
//3명 이상의 국영수 성적 입출력 프로그램
package ex03;
import java.util.Scanner;
public class ListProgram {
public static void main(String[] args) {
ExamList list = new ExamList();
list.exams = new Exam[3];
list.current = 0;
int menu;
boolean keepLoop = true;
while(keepLoop)
{
menu = inputMenu();
switch(menu)
{
case 1:
inputList(list);
break;
case 2:
printList(list);
break;
case 3:
System.out.println("Bye~~");
keepLoop = false;
break;
default:
System.out.println("잘못된 값을 입력하셨습니다. 메뉴는 1~3까지입니다.");
}
}
}//main()
private static void printList(ExamList list) {
System.out.println("┌────────────────────────┐");
System.out.println(" │ 성적출력 │");
System.out.println("└────────────────────────┘");
System.out.println();
int count = list.current;
Exam[] exams = list.exams;
for(int i=0; i<count; i++) {
Exam exam = exams[i];
int kor = exam.kor;
int eng = exam.eng;
int math = exam.math;
int total = kor + eng + math;
float avg = total/3.0f;
System.out.printf("%d번 학생\n",i+1);
System.out.printf("\t국어 : %3d\n", kor);
System.out.printf("\t영어 : %3d\n", eng);
System.out.printf("\t수학 : %3d\n", math);
System.out.println("-----------------------");
System.out.printf("\t총점 : %3d\n",total);
System.out.printf("\t평균 : %6.2f\n",avg);
System.out.println("────────────────────────");
}
}//printList
private static void inputList(ExamList list) {
Scanner scan = new Scanner(System.in);
System.out.println("┌────────────────────────┐");
System.out.println(" │ 성적입력 │");
System.out.println("└────────────────────────┘");
System.out.println();
int kor, eng, math;
System.out.printf("%d번 학생\n",list.current+1);
do {
System.out.printf("국어 : ");
kor = scan.nextInt();
if(kor<0 || 100<kor)
System.out.println("입력오류 : 성적유효범위에 맞게 입력하세요.");
} while(kor<0 || 100<kor);
do {
System.out.printf("영어 : ");
eng = scan.nextInt();
if(eng<0 || 100<eng)
System.out.println("입력오류 : 성적유효범위에 맞게 입력하세요.");
} while(eng<0 || 100<eng);
do {
System.out.printf("수학 : ");
math = scan.nextInt();
if(math<0 || 100<math)
System.out.println("입력오류 : 성적유효범위에 맞게 입력하세요.");
} while(math<0 || 100<math);
Exam exam = new Exam();
exam.kor = kor;
exam.eng = eng;
exam.math = math;
Exam[] exams = list.exams;
int count = list.current;
if(list.exams.length == list.current) { //list.exams 배열의 길이가 현재 list.current와 같다. 즉 exams의 공간이 없다면.
// 1. 크기가 5개 정도 더 큰 새로운 배열을 생성하시오.
Exam[] temp = new Exam[list.exams.length + 5]; //8개. 다쓰면 또 +5개
// 2. 값을 이주시키기
for(int i=0; i<count; i++)
temp[i]=exams[i];
// 3. list.exams가 새로만든 temp 배열을 참조 할 수 있도록 한다.
list.exams = temp;
}
list.exams[list.current] = exam;
list.current++;
System.out.println("────────────────────");
}//inputList()
static int inputMenu() {
Scanner scan = new Scanner(System.in);
System.out.println("┌──────────────────┐");
System.out.println("│ 메인 메뉴 │");
System.out.println("└──────────────────┘");
System.out.println("\t1. 성적입력 ");
System.out.println("\t2. 성적출력 ");
System.out.println("\t3. 종료 ");
System.out.println("\t선택> ");
int menu = scan.nextInt();
return menu;
}//inputMenu()
}
Exam[] exams = list.exams;
int count = list.current;
if(list.exams.length == list.current) { //list.exams 배열의 길이가 현재 list.current와 같다. 즉 exams의 공간이 없다면.
// 1. 크기가 5개 정도 더 큰 새로운 배열을 생성하시오.
Exam[] temp = new Exam[list.exams.length + 5]; //현재크기만큼 다 사용했다면 추가로 5개 생성된다.
// 2. 값을 이주시키기
for(int i=0; i<count; i++)
temp[i]=exams[i];
// 3. list.exams가 새로만든 temp 배열을 참조 할 수 있도록 한다.
list.exams = temp;
}
최소한의 배열의 크기를 3으로 만들어 준 후 추가적으로 더 필요한 5개의 크기는 if문을 통해 만들어 줬다.
배열의 길이가 현재사용한 길이와 같으면 더이상의 공간이 없다는 뜻이다.
그럼 그 때 더 필요한 크기만큼 더해서 새로운 배열을 생성해준다.
현재까지 받은 값을 새로운 배열로 옮겨준다.
기존에 배열이 새로만든 배열을 참조 할 수 있도록 한다.
배열의 크기만큼 다 사용하고 나면 배열의 크기를 5개 늘려줘서 계속적으로 학생성적을 입력 할 수 있게 됐다.
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[JAVA] 캡슐화 - 국영수 성적 입출력 프로그램 (0) | 2021.11.28 |
---|---|
[JAVA] 함수 Overloading - 국영수 성적 입출력 프로그램 (0) | 2021.11.25 |
[JAVA] 구조적인 프로그래밍 (0) | 2021.11.24 |
[JAVA] 자바의 입출력 (0) | 2021.11.21 |
[JAVA] 자바의 연산자와 제어문 (0) | 2021.11.21 |