전체코드 3개로 나누어서 리뷰!
-> 참고로 나눈 코드 3개를 모두 붙여야 정상 작동된다

- 입력한 숫자에 따라 메뉴를 조회하고 각 메뉴별 프로그램을 실행 -
1번: 성적입력 (이름, 국어점수, 수학점수, 영어점수)
2번: 성적조회
0번: 프로그램 종료
< JAVA 성적 입력 프로그램 >
package ex03;
import java.util.Scanner;
public class Example02 {
public static void execute() {
Scanner s = new Scanner(System.in);
String[] name = new String[100];
int[] kor = new int[100];
int[] eng = new int[100];
int[] math = new int[100];
int count = 0;
boolean run = true;
while(run) {
System.out.println("------------------------------------");
System.out.println("1. 성적입력|2.성적조회|0.프로그램종료");
System.out.println("------------------------------------");
System.out.print("선택>");
int menu = s.nextInt();
1. 입력한 값을 받아올 스캐너 생성
* 맨 위에 import java.util Scanner 말고 import java.util *을 작성하면 자바 클래스의 모든 유틸을 가져와주어 편리하다.
2. 받아올 데이터들의 배열을 각각 사이즈 100(멕시멈 값)으로 생성해 준다. - 이름, 국어점수, 영어점수, 수학점수
3. int count = 0; 으로 배열의 크기를 지정할 count 변수에 초기값으로 0을 넣어준다.
**배열의 크기를 미리 0으로 담아둬야 for문에서 비교값으로 쓰거나 (i < count) 배열 인덱스 선택할 때 편함
4. 메뉴를 만들고 종료를 누를 때까지 반복시키기 위해 while문 안에 넣어준다.
5. boolean 변수에 true값을 넣어 while문에 담아줘야 0번(종료버튼)을 입력했을 때 false로 빠져나올 수 있다(중단)
switch(menu) {
case 0:
run = false;
break;
case 1:
System.out.print("이름>");
name[count] = s.next();
System.out.print("국어점수>");
kor[count] = s.nextInt();
System.out.print("영어점수>");
eng[count] = s.nextInt();
System.out.print("수학점수>");
math[count] = s.nextInt();
count = count+1;
System.out.println(count + "명이 입력되었습니다.");
break;
6. while문 안에 switch~case문을 넣어 각 메뉴의 번호를 입력했을 때 해당 메뉴가 실행되도록 프로그래밍할 수 있다.
6-1) case 0 : 프로그래밍 종료
-> run = false는 while문을 빠져나가기 위해 씀, break는 switch문 빠져가가기 위해 씀(break는 default제외하고 모든 case에 씀)
6-2) case 1: 성적 입력
-> System.out.print(">이름")등 으로 각 데이터 입력 창을 사용자에게 보여주기 위해 작성
-> name[count] = s.next(); 등으로 각각의 변수의 해당 인덱스(count)에 데이터를 입력하기 위해 next( ); nextInt( );사용
-> 데이터를 입력했으면 다음 입력했을 때 번호를 바꿔주기 위해 count = count+1 해준다. (2번 다음에 3번에 입력되게끔)
-> 아래에 총 입력된 데이터를 표시해주기 위해 sysout으로 입력창 생성
case 2:
System.out.print("조회할 이름>");
String sname = s.next();
boolean find = false;
for(int i = 0; i < count ; i++) {
if(name[i].equals(sname)) {
System.out.println("국어:"+kor[i]);
System.out.println("영어:"+eng[i]);
System.out.println("수학:"+math[i]);
find = true;
}
}
if(find==false) {
System.out.println("해당 학생이 없습니다.");
}
break;
default:
System.out.println("잘못 입력하셨습니다!");
}
}//while문 종료
System.out.println("프로그램 종료!");
}
}
6-3) case 2: 성적 조회
-> 조회할 이름을 입력할 창을 생성하기 위해 s.next(); 를 String 타입의 sname에 담아준다. sysout은 표시해주기 위해 작성
-> for문에서 해당 이름을 찾았을 경우(true) 찾지 못했을 경우(false)로 나누어 조건을 실행해주기 위해 boolean find의 초기값을 false로 둔다. *처음에 true로 두면 아래 false를 실행시키지 못함
-> for문으로 배열의 0번째 인덱스부터 count-1번째까지 반복하여 해당되는 이름을 찾고 찾으면 boolean = true로 바꿔 해당 이름의 국어, 영어, 수학 점수를 도출한다.
-> sname(입력한이름)과 name[i] (목록에 존재하는 이름)을 비교하기 위해 equals메서드를 사용한다.
* equals를 쓸 때 비교할 값들의 위치는 서로 변환해도 되며 equals는 string타입을 비교할 때만 사용한다(int 등 사용불가)
-> find==false 해당 사람을 찾지 못하면 "해당 학생이 없습니다" 문구를 표시한다.
* 메뉴1을 선택해 성적을 입력한 뒤 메뉴2를 실행하면 이미 count++되어 있기 때문에 입력한 데이터가 추가된 전체 목록이 출력된다.
7. 프로그램 종료 알림은 while문 반복이 끝난 후 실행되어야 하기 때문에 바깥에 sysout으로 "프로그램 종료!" 문구를 생성한다.
각 메뉴 번호를 선택했을 때 콘솔창은 위와 같이 실행된다.
'BE > Java [Servlet , Spring]' 카테고리의 다른 글
Java 배열의 합계 및 최대&최소 값 구하기 (Sum, Max, Min) (0) | 2023.01.09 |
---|---|
Java 상품 관리 프로그램 리뷰(DecimalFormat, integer parseInt) (0) | 2023.01.08 |
자바 배열(array) -배열 구조 및 합계 구하기 (0) | 2023.01.06 |
자바 조건문- if문, switch~case문 (0) | 2023.01.03 |
자바 출력문(print , printf, printInt)함수 및 지시자 %n %s %d.. (1) | 2023.01.02 |