본문 바로가기

JAVA/기본다지기

JAVA 4일차 심화

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