14-2: JAVA method overriding practice

jk·2024년 1월 18일
0

kdt 풀스택

목록 보기
24/127



1. instanceof 연산자에 대하여 설명하시오.

// Inheritance is needed between address1 and address2.
// Or compile error.
boolean instanceof(classAddress address1, classAddress address2) {
	boolean answer;
	if (address1 >= address2) {
		answer = true;
	} else {
		answer = false;
	};
	return answer;
}



2. 갬블링 게임을 만들어 보자.

두 사람이 게임을 진행한다.
이들의 이름을 키보드로 입력 받으며 각 사람은 Person 클래스로 작성하라.
그러므로 프로그램에는 2개의 Person 객체가 생성되어야 한다.
두 사람은 번갈아 가면서 게임을 진행하는데 각 사람이 자기 차례에서 <Enter> 키를 입력하면, 
3개의 난수가 발생되고 이 숫자가 모두 같으면 승자가 되고 게임이 끝난다. 
난수의 범위를 너무 크게 잡으면 3개의 숫자가 일치하게 나올 가능성이 적기 때문에 
숫자의 범위는 1~3까지로 한다.
//
// code
//
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
//
class Person {
    private String name;
//    
    Person(String name) {
        this.name = name;
    }
    String getName() {
        return this.name;
    }
}
class PrintStringBuilder {
    private static StringBuilder print = new StringBuilder();
    PrintStringBuilder() {
    }
    static void intro() {
        print.append("참가자의 이름을 입력해주세요: ");
        System.out.print(print);
        print.setLength(0);
    }
    static void victory(String name) {
        print.append(name);
        print.append("님이 이겼습니다. 게임을 종료합니다.");
        System.out.print(print);
        print.setLength(0);
    }
    static void randomNums(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            print.append(i + 1);
            print.append("번째 숫자는 ");
            print.append(nums[i]);
            print.append(" 입니다.\n");
        };
        System.out.print(print);
        print.setLength(0);
    }
    static void randomStart(String name) {
        print.append(name);
        print.append("님의 차례입니다. 진행하시려면 <Enter>를 눌러주세요.");
        System.out.print(print);
        print.setLength(0);
    }
}
class GameGambling {
    private static final int PARTICIPANTS_NUM = 2;
    private static final int GAMBLE_NUM = 3;
    private static final int FIRST_NUM = 1;
    private static final int LAST_NUM = 3;
//    
    //static Scanner scanner = new Scanner(System.in, "Cp949");	//for korean characters in cmd.exe chcp 949
    static Scanner scanner = new Scanner(System.in);
//    
    public static void main(String[] args) {
        Person[] participants = new Person[PARTICIPANTS_NUM];
//        
        for (int i = 0; i < PARTICIPANTS_NUM; i++) {
            PrintStringBuilder.intro();
//            
            String name = scanner.nextLine();
//            
            participants[i] = new Person(name);
        };
        randomRun:
        while(true) {
            for (int i = 0; i < PARTICIPANTS_NUM; i++) {
                String tempName = participants[i].getName();
//                
                PrintStringBuilder.randomStart(tempName);
                scanner.nextLine();
//                
                int[] gambleNums = new int[GAMBLE_NUM];
//                
                boolean win = true;
                int firstNum = 0;
                for (int j = 0; j < GAMBLE_NUM; j++) {
                    int tempRanNum = ThreadLocalRandom.current().nextInt(FIRST_NUM, LAST_NUM + 1);
                    gambleNums[j] = tempRanNum;
                    if (j == 0) {
                        firstNum = tempRanNum;
                    } else if (win && (firstNum != tempRanNum)) {
                        win = false;
                    };
                };
                PrintStringBuilder.randomNums(gambleNums);
//                
                if (win) {
                    PrintStringBuilder.victory(tempName);
                    break randomRun;
                };
            };
        };
        scanner.close();
    }
}
//
// print
//
참가자의 이름을 입력해주세요: jk
참가자의 이름을 입력해주세요: hhoop
jk님의 차례입니다. 진행하시려면 <Enter>를 눌러주세요.
1번째 숫자는 2 입니다.
2번째 숫자는 2 입니다.
3번째 숫자는 3 입니다.
hhoop님의 차례입니다. 진행하시려면 <Enter>를 눌러주세요.
1번째 숫자는 2 입니다.
2번째 숫자는 2 입니다.
3번째 숫자는 2 입니다.
hhoop님이 이겼습니다. 게임을 종료합니다.



7.다음을 만족하는 클래스 Employee를 작성하시오

(8번문제부터는 이것과 관련된 문제입니다).

- 클래스 Employee(직원)은 클래스 Regular(정규직)와 Temporary(비정규직)의 상위 클래스
- 필드: 이름, 나이, 주소, 부서, 월급 정보를 필드로 선언
- 생성자 : 이름, 나이, 주소, 부서를 지정하는 생성자 정의
- 메소드 printInfo() : 인자는 없고 자신의 필드 이름, 나이, 주소, 부서를 출력
//
// code
//
class Employee {
    static StringBuilder print = new StringBuilder();
//    
    private String name;
    private int age;
    private String address;
    private String department;
    private int salary;
    Employee(String name, int age, String address, String department) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.department = department;
    }
    void printInfo() {
        print.append("이름: ");
        print.append(this.name);
        print.append("\n나이: ");
        print.append(this.age);
        print.append("\n주소: ");
        print.append(this.address);
        print.append("\n부서: ");
        print.append(this.department);
        print.append("\n");
        System.out.print(print);
        print.setLength(0);
    }
}
class Regular extends Employee {
    Regular(String name, int age, String address, String department) {
        super(name, age, address, department);
    }
}
class Temporary extends Employee {
    Temporary(String name, int age, String address, String department) {
        super(name, age, address, department);        
    }
}



8. 다음을 만족하는 클래스 Regular를 작성하시오. Series_02 (필수)

•	클래스 Regular는 위에서 구현된 클래스 Employee의 하위 클래스
•	생성자 : 이름, 나이, 주소, 부서를 지정하는 상위 생성자 호출
•	Setter : 월급 정보 필드를 지정
•	메소드 printInfo() : 인자는 없고 "정규직"이라는 정보와 월급을 출력
//
// code
//
class Regular extends Employee {
    private int salary;
    Regular(String name, int age, String address, String department) {
        super(name, age, address, department);
    }
    void setSalary(int salary) {
        this.salary = salary;
    }
    void printInfo() {
        super.printInfo();
        Employee.print.append("정규직\n");
        Employee.print.append("월급: ");
        Employee.print.append(this.salary);
        Employee.print.append("\n");
        System.out.print(Employee.print);
        Employee.print.setLength(0);
    }
}
profile
Brave but clumsy

0개의 댓글