L03SwitchEx.java에서 사용자가 0~100까지의 정수가 아닌 다른 값을 입력 했을 경우 오류를 잡아주도록 수정.
package com.javalesson.ch03control;
import java.util.Scanner;
public class L03SwitchEx {
public static void main(String[] args) {
String kor_score="", eng_score="", mat_score="";
String grade = "B";
boolean int_flag = true;
int int_kor_score = 200, int_eng_score = 200, int_mat_score = 200;
Scanner scan = new Scanner(System.in);
System.out.println("점수는 0~100까지의 정수만 입력하세요.");
do{
int_flag = true;
System.out.print("국어점수를 입력하세요: ");
kor_score = scan.nextLine();
try{
int_kor_score = Integer.parseInt(kor_score);
int_flag = (int_kor_score<=100)?false:true;
}catch(Exception e){}
}while(int_flag);
do{
int_flag = true;
System.out.print("영어점수를 입력하세요: ");
eng_score = scan.nextLine();
try{
int_eng_score = Integer.parseInt(eng_score);
int_flag = (int_eng_score<=100)?false:true;
}catch(Exception e){}
}while(int_flag);
do{
int_flag = true;
System.out.print("수학점수를 입력하세요: ");
mat_score = scan.nextLine();
try{
int_mat_score = Integer.parseInt(mat_score);
int_flag = (int_mat_score<=100)?false:true;
}catch(Exception e){}
}while(int_flag);
//switch 문으로 만든 성적 프로그램으로 3개 점수의 평균 점수와 학점을 출력하세요.
//switch 문으로 '+' -> 95~ 85~
char plus = ' ';
int avg = (Integer.parseInt(kor_score) + Integer.parseInt(eng_score) + Integer.parseInt(mat_score))/3;
switch(avg/10){
case 10: case 9: grade = "A"; break;
case 8: grade = "B"; break;
case 7: grade = "C"; break;
case 6: grade = "D"; break;
default: grade = "F"; break;
}
plus = (((avg+5)/10-avg/10)==1)?'+':' ';//삼항연산
if(avg==100){plus = '+';} //100점도 A+로 나오도록.
System.out.println("평균 점수는 "+ avg + "점 입니다.");
System.out.println("평균 학점은 "+ grade + plus + "입니다.");
}//main end
}//class end
좀 더 생각해 볼 점
국어, 영어, 수학으로 계속 반복되는 내용이므로 메소드를 따로 생성하여 코드를 간결하게 만들어보기.
package com.javalesson.ch03control;
import java.util.Scanner;
public class L03SwitchEx {
public static void main(String[] args) {
L03SwitchEx sc = new L03SwitchEx(); // 생성자 호출
String grade; // 등급
char plus; // + 출력
int avg; // 평균
avg = sc.score(); // score함수의 return값을 avg에 대입
switch(avg/10){
case 10: case 9: grade = "A"; break;
case 8: grade = "B"; break;
case 7: grade = "C"; break;
case 6: grade = "D"; break;
default: grade = "F"; break;
}
plus = (((avg+5)/10-avg/10)==1)?'+':' ';
if(avg==100){plus = '+';} //100점도 A+로 나오도록.
System.out.println("평균 점수는 "+ avg + "점 입니다.");
System.out.println("평균 학점은 "+ grade + plus + "입니다.");
}
public int score(){
Scanner scan = new Scanner(System.in);
int cnt=0, score=0, total=0, avg; // 반복 횟수, 과목별점수, 총점, 평균
boolean int_flag; //while문을 위한 불리언
String str_score;//문자열로 점수받기
System.out.println("점수는 1~100까지의 정수만 입력하세요.");
do{
int_flag = true; //다시 true로 초기화. 안했을 시 2번째부터 문자가 입력되어도 그냥 넘어갔음.
String[] subject = {"국어", "영어", "수학"};//과목명
do{
System.out.print(subject[cnt]+"점수를 입력하세요: ");
str_score = scan.nextLine();
try{
score = Integer.parseInt(str_score);
int_flag = (score<=100)?false:true;
}catch(Exception e){
System.out.println("0~100사이의 정수를 입력하세요.");
}
}while(int_flag);
total += score; //score로 받은 값을 total에 누적
cnt++; // 정상적으로 score값을 저장하고 cnt를 1증가
}while(cnt<=2); //반복횟수가 2가 되면 빠져나감
avg = total/3; //평균값을 계산
return avg;
}//main end
}//class end
'JAVA > 기본다지기' 카테고리의 다른 글
JAVA 6일차 필기 (0) | 2016.08.08 |
---|---|
JAVA 5일차 필기 (1) | 2016.08.05 |
JAVA 4일차 필기 (0) | 2016.08.04 |
JAVA 3일차 필기 (0) | 2016.08.03 |
JAVA 2일차 필기 (1) | 2016.08.02 |