본문 바로가기

Java

객체 생성, 메소드의 파라미터로 객체를 쓰는법

한 과목의 성적만 입력받았던 이전 코드를 여러과목의 성적을 입출력하는 코드로 수정.

 

import java.util.Scanner;
class AllSubject {
    int kor;
    int eng;
    int math;
}
 
public class ArrayStructure {
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) throws Exception {
 
        AllSubject as = new AllSubject();
        boolean loop = true;
 
        while (loop) {
            int m = menu();
            switch (m) {
            case 1:
                input(as);
                break;
            case 2:
                output(as);
                break;
            case 3:
                System.out.println("프로그램 종료.");
 
                loop = false;
                break;
 
            default:
                System.out.println("잘못된 값을 입력하셨습니다. 메뉴는 1~3까지입니다.");
            }
        }
        sc.close();
    }
 
    static void input(AllSubject as) {
        int kor, eng, math;
 
        System.out.println("      -성적 입력-");
        System.out.println();
 
        do {
            System.out.printf("국어: ");
            kor = sc.nextInt();
            if (kor < 0 || 100 < kor) {
                System.out.println("성적은 0~100까지의 범위만 입력이 가능합니다.");
            }
        } while (kor < 0 || 100 < kor);
 
        do {
            System.out.printf("영어: ");
            eng = sc.nextInt();
            if (eng < 0 || 100 < eng) {
                System.out.println("성적은 0~100까지의 범위만 입력이 가능합니다.");
            }
        } while (eng < 0 || 100 < eng);
 
        do {
            System.out.printf("수학: ");
            math = sc.nextInt();
            if (math < 0 || 100 < math) {
                System.out.println("성적은 0~100까지의 범위만 입력이 가능합니다.");
            }
        } while (math < 0 || 100 < math);
 
        as.kor = kor;
        as.eng = eng;
        as.math = math;
        System.out.println("────────────────────────");
    }
 
    static void output(AllSubject as) {
        int kor = as.kor;
        int eng = as.eng;
        int math = as.math;
        int total = as.kor + as.eng + as.math;
        float avg = total / 3.0f;
        System.out.println("국어: " + kor);
        System.out.println("영어: " + eng);
        System.out.println("수학: " + math);
        System.out.println("총점: " + total);
        System.out.println("평균: " + avg);
    }
 
    static int menu() {
        System.out.println("      -메인 메뉴-");
        System.out.println("\t1. 성적입력 ");
        System.out.println("\t2. 성적출력 ");
        System.out.println("\t3. 종료 ");
        System.out.println("\t선택> ");
        int menu = sc.nextInt();
        return menu;
    }
}
 
cs
 

- Checklist

1. 파라미터로 3과목을 따로 던저주는 대신 하나의 객체로 던져주기위해

AllSubject 클래스에 과목변수들을 선언, 해당 클래스의 인스턴스를 생성해 각 메소드들의 파라미터로 사용.

2. 각각의 메소드에서 생성했던 Scanner 인스턴스는 메소드 내에서 close()했을때 오류발생.

그냥 전역에서 생성하고 메인메소드에서 닫음.