728x90
반응형
제작일자: 2020.06
[사용된 개념]
변수, 반복문, 선택문 & 클래스 & 생성자 & 상속 & 오버 라이딩 & 오버 로딩 & 추상 클래스 & 배열
[큰 구조]
1~45 숫자들 중 6개의 숫자를 컴퓨터가 랜덤(math.random()이용)으로 뽑아 answerA라는 배열에 순서대로 저장을 한다.
또한 사용자는 1~45중에서 6개의 숫자를 뽑아 순서대로 적어야 한다.
이때 사용될 주 클래스는 guess클래스이다.
그리고 컴퓨터는 사용자가 숫자 몇 개를 맞췄는지 알려주고 그에 맞는 상금을 수여한다.
[코드]
import java.util.Scanner;
//컴퓨터가 복권 답 정하기
class answer {
int[] answerA = new int[6]; // 복권 답이 저장될 배열 answerA
}
class guess extends answer{
Scanner sc = new Scanner(System.in);
int[] guessA = new int[6]; // 사용자의 답이 저장될 배열
public int answer_count = 0; // 사용자가 맞춘 개수
public String madeby; // 만든 이의 이름
public guess() {}
public guess(String name) { // guess 생성자; 문자열을 매개변수로 가짐 = 오버로딩!!
madeby = name;
}
// Guess 메소드; 사용자로부터 6개의 난수를 입력받아 순서대로 저장
public void Guess() {
for(int i=0; i<guessA.length; i++) {
guessA[i] = sc.nextInt();
}
}
// 기본적인 인사말
public void bye() {
System.out.println("복권을 이용해 주셔서 감사합니다.");
}
}
class all extends guess { // 전부 맞춘 경우;answer_count = 6 인 경우
public all() {}
public void bye() { // 오버라이딩(overriding); guess클래스의 bye()대신 실행됨
System.out.println("오늘 행운의 신이 당신을 선택하셨나 봅니다.축하드려요!");
System.out.println("총 상금은 1,300,000,000원입니다.");
}
}
//guess 클래스의 서브 클래스 part
class part extends guess { // 일부분만 맞춘 경우; 1 <= answer_count < 6
public part() {}
public void bye() { // bye(); guess클래스의 bye()대신 실행됨 = 오버라이딩(overriding)
System.out.println("이만한 행운이 또 어디있을까요?유용하게 사용하시기를 바랍니다.");
}
// 상금 기준을 설정해둔 메소드 = 오버로딩(overloading)
public void prize(int n) { // n = answer_count; 사용자가 맞춘 개수
if(n == 5) {
System.out.println("총 상금은 100,000,000원입니다.");
}
else if (n == 4) {
System.out.println("총 상금은 500,000원입니다.");
}
else if (n == 3) {
System.out.println("총 상금은 50,000원입니다.");
}
else if (n == 2) {
System.out.println("총 상금은 5,000원입니다.");
}
else if (n == 1) {
System.out.println("총 상금은 2,000원입니다.");
}
}
// 어느 사용자가 당첨번호 몇개 맞췄는지 출력하는 메소드 = 오버로딩(overloading)
public void prize(String name, int n) {
System.out.println(name + "님께서 " + n + "개의 숫자를 맞추셨습니다.");
}
}
//guess 클래스의 서브 클래스 nothing
class nothing extends guess { // 사용자가 아무것도 맞추지 못한 경우;answer_count = 0
public nothing() {}
public void bye() { // 오버라이딩(overriding); guess클래스의 bye()대신 실행됨
System.out.println("귀하의 인생은 복권으로 끝나지 않음을 기억해주십시오.");
}
}
// 추상 클래스 구현 ; 해당 상금을 획득할 가능성
abstract class percentage {
public abstract float per(int n); // 설계
}
class winning extends percentage{
public float per (int n) { // 구현
return (float)n/6; // n = answer_count
}
}
public class Getcha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("복권에 당첨되어 봅시다.");
System.out.println("귀하의 이름을 입력해 주세요: ");
String name = sc.nextLine(); // 사용자의 이름을 입력받음
System.out.println("1~45 숫자 중에서 6개를 골라 순서에 유의하여 입력해주세요.");
// for문과 math.random으로 랜덤하게 6개의 숫자 뽑기
answer a = new answer();
for (int i=0; i<a.answerA.length; i++) {
a.answerA[i] = (int)(Math.random()*45)+1; // 뽑은 숫자들을 순서대로 배열에 저장
}
// 사용자 입력 받기
guess g = new guess();
g.Guess(); // Guess 메소드 실행; 사용자로부터 입력 받기
for(int i=0; i<g.guessA.length; i++) { // answer_count 계산하기
if(g.guessA[i] == a.answerA[i]) {
g.answer_count += 1;
}
}
// 실제 당첨 번호 출력
System.out.println("당첨번호:");
for (int i=0; i<a.answerA.length; i++) {
System.out.print(a.answerA[i]+" ");
}
System.out.println();
// 상금 관련 클래스 객체들 생성
all all = new all();
part part = new part();
nothing no = new nothing();
winning winner = new winning();
part.prize(name, g.answer_count); //name님께서 n개의 숫자를 맞추셨습니다 출력
if(g.answer_count == 6) { // 6개 모두 맞춘 경우
all.bye();
}
else if(g.answer_count >= 1) { // 1개 이상 6개 미만 맞춘 경우
part.prize(g.answer_count);
System.out.println(winner.per(g.answer_count)*100+"%의 확률을 뚫으셨습니다.");
part.bye();
}
else if(g.answer_count == 0) { // 아무것도 맞추지 못한 경우
no.bye();
}
guess by = new guess("만든이"); // guess클래스의 by객체 생성 & 생성자를 이용해 값 전달
System.out.println("Made by."+ by.madeby); // "Made by.만든이" 출력
sc.close();
}
}
[오버로딩과 오버 라이딩의 차이점]
오버로딩 | 오버라이딩 | |
리턴형 | 달라도 상관없음 | 동일해야 함 |
매개변수 타입/개수/이름 | 반드시 달라야 함 | 동일해야 함 |
메소드 이름 | 동일해야 함 | 동일해야 함 |
적용되는 범위 | 같은 클래스 내 | 상속관계 |
[작성일자 기준 느낀 점]
처음으로 코딩을 배우면서 작성한 코드여서 그런지
중복되는 부분이나 굳이 필요하지 않은 개념들이 끼워진 기분이 들었다.
얼른 2학기 때 JS 제대로 학습해서 이걸 웹으로 구현해보고 싶다.
728x90
반응형
'프로젝트' 카테고리의 다른 글
React.js를 이용해서 게시판 만들기 (1) | 2021.08.06 |
---|---|
React.js로 카운팅 앱 만들기 (1) | 2021.08.06 |
React.js 이용하기 (2) | 2021.08.06 |
[JavaScript]TodoList 만들기 (0) | 2021.07.30 |