웹_프론트_백엔드/단과

[단과_JAVA] 2020.02.13

shine94 2020. 2. 14. 02:48

1. 기본생성자(default constructor)

 : 컴파일 할 때, 클래스에 생성자가 하나도 정의되지 않은 경우

   컴파일러는 자동적으로 기본 생성자를 추가한다.

   

   클래스이름() {  }

 

 

2. 기본생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을때 뿐이다.

 

 

3. 부모클래스에 기본생성자가 없다면 모든 자식 클래스에도 기본 생성자가 없다.

 : 자식 기본 생성자(매개변수가 없는 생성자)는 
   항상 부모의 기본 생성자를 호출한다.
   만약 부모에 기본 생성자가 없다면 반드시 자식클래스에서
   생성자를 만들고 부모 생성자에게 값을 직접 전달해야 한다.
   
   따라서 부모 클래스에는 기본 생성자를 만들어 놓는 것이 좋다.

 

 

4. 오늘 실습코드

1) Job

package day22;

import java.util.Random;
import java.util.Scanner;

class Human{
	String name;
	int age;
	int money;
	
	public Human() {}
	
	public Human(String name, int age, int money) {
		super();
		this.name = name;
		this.age = age;
		this.money = money;
	}
	
	void intro() {
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age + "살");
		System.out.println("잔고 : " + money + "원");
	}
	
}

class seaKing extends Human{
	//1.적들의 수 : 랜덤(1~100)
	//적들 한명 물리칠때마다 100골드 약탈
	//2.물리치는데 3초
	//3.60% 확률로 적들 처치 성공
	//4.실패시 재산 반토막
	//5.3번 연속 실패시 전재산 빈털털이
	
	//적들을 처치하는 시간
	int time = 3;
	//적의 수
	int enemy;
	//모두 무찔렀을 때 얻을 수 있는 수익
	int property;
	//한명 무찌를때마다 얻는 골드
	int plunder_gold = 100;
	//적들을 무찌를 확률 50%
	int rating = 50;
	//실패 횟수
	int failCnt;
	
	public seaKing() {}

	public seaKing(String name, int age, int money) {
		super(name, age, money);
	}
	
	void war() {
		//100칸 배열에 모두 0을 넣는다
		int[] temp = new int[100];
		//1이 rating칸 들어가 있다
		//default : 50칸에 1이 들어감
		for (int i = 0; i < rating; i++) {
			temp[i] = 1;
		}
		Random r = new Random();
		//temp배열의 길이는 100이므로 0~99 중 한 가지 정수가 나온다
		int idx = r.nextInt(temp.length);
		//적의 수는 1~100명 중 랜덤하게 처들어옴
		enemy = r.nextInt(100) + 1;
		
		//모두 무찔렀을 때 얻을 수 있는 약탈 골드는 적 X 골드
		property = enemy * plunder_gold;
		
		//물리치는 데 time 초 만큼 걸림
		System.out.println(enemy + " 적들이 처들어 왔다\n" + name + "이(가) 전쟁 중.");
		for (int i = 0; i < time; i++) {
			System.out.println(".");
			try{Thread.sleep(1000);} catch(InterruptedException e) {;}
		}
		
		//50%확률
		if(temp[idx] == 1) {
			//성공
			System.out.println("적들을 모두 물리쳤다!!!");
			//총 수익 재산에 누적
			money += property;
			//연속 실패 횟수 초기화
			failCnt = 0;
		} else {
			//실패
			System.out.println(name + "이(가) 전쟁에서 졌다!");
			money *= 0.5;
			failCnt++;
		}
		
		//실패 횟수가 3의 배수이면 3번 연속 실패
		if(failCnt % 3 == 0 && failCnt != 0) {
			//전재산 빈털털이
			money = 0;
			System.out.println(name + "은(는) 적들에게 모든 재산을 뜯겨서 빈털털이가 되었습니다 ㅜㅜ");
		}
		
		//자기소개
		intro();
		System.out.println();
	} 
	
	
}

class Gagman extends Human{
	//1.방청객 수 : 랜덤 (1~100)
	//방청객 한 명당 100000원
	//2.웃기는 데 5초
	//3.80% 웃기는 데 성공
	//4.실패시 수익 절반
	//5.2번 연속 실패시 전 재산 절반
	
	//웃기는 데 걸리는 시간
	int time = 5;
	//방청객 수
	int guestNum;
	//총 수익
	int income;
	//공연 티켓 가격
	int t_price = 100000;
	//웃길 확률
	int rating = 80;
	//실패 횟수
	int failCnt;

	public Gagman() {}
	
	
	
	public Gagman(String name, int age, int money) {
		super(name, age, money);
	}

	public Gagman(String name, int age, int money, int time, int guestNum, int income, int t_price, int rating) {
		super(name, age, money);
		this.time = time;
		this.guestNum = guestNum;
		this.income = income;
		this.t_price = t_price;
		this.rating = rating;
	}

	public Gagman(String name, int age, int money, int guestNum, int income, int t_price, int rating) {
		super(name, age, money);
		this.guestNum = guestNum;
		this.income = income;
		this.t_price = t_price;
		this.rating = rating;
	}

	public Gagman(int guestNum, int income, int t_price, int rating) {
		super();
		this.guestNum = guestNum;
		this.income = income;
		this.t_price = t_price;
		this.rating = rating;
	}

	public Gagman(String name, int age, int money, int guestNum, int income, int t_price) {
		super(name, age, money);
		this.guestNum = guestNum;
		this.income = income;
		this.t_price = t_price;
	}

	public Gagman(String name, int age, int money, int guestNum, int income) {
		super(name, age, money);
		this.guestNum = guestNum;
		this.income = income;
	}
	
	void makeFun() {
		//100칸 배열에 모두 0을 넣는다.
		int[] temp = new int[100];
		//1이 rating칸 들어가 있다.
		//default : 80칸에 1이 들어감.
		for (int i = 0; i < rating; i++) {
			temp[i] = 1;
		}
		Random r = new Random();
		//temp배열의 길이는 100이므로 0~99중 한 가지 정수가 나온다.
		int idx = r.nextInt(temp.length);
		//방청객 수는 1명부터 100명중 랜덤하게 입장.
		guestNum = r.nextInt(100) + 1;
		
		//총 수익은 방청객 수 x 공연 티켓 가격
		income = guestNum * t_price;
		
		//웃기는 데 time초 만큼 걸림.
		System.out.print(guestNum + "명 시청중\n"+name+"이(가) 개그 중.");
		for (int i = 0; i < time-3; i++) {
			System.out.print(".");
			try {Thread.sleep(1000);} catch (InterruptedException e) {;}
		}
		//80%확률
		if(temp[idx] == 1) {
			//성공
			System.out.println("모두가 웃었다.");
			//총 수익 모두 잔고에 누적
			money += income;
			//연속 실패 횟수 초기화
			failCnt = 0;
		}else {
			//실패
			System.out.println("모두가 나갔다.");
			//총 수익의 절반만 누적
			money += income * 0.5;
			//실패 횟수 1 증가
			failCnt ++;
		}
		
		//실패 횟수가 2의 배수면 2번 연속 실패
		if(failCnt % 2 == 0 && failCnt != 0) {
			//전재산 반토막
			money *= 0.5;
			System.out.println("2번 연속 실패..");
		}
		//자기 소개
		intro();
	}
	
}


public class Job {
	public static void main(String[] args) {
		
		seaKing 박빈나 = new seaKing("박빈나", 21, 0);
		Scanner sc = new Scanner(System.in);
		while(true) {
			System.out.println("1전쟁2나가기");
			int choice = sc.nextInt();
			if(choice == 1) {
				박빈나.war();
			}else {
				break;
			}
		}
		
		/*
		Gagman 한동석 = new Gagman("한동석", 20, 0);
		Scanner sc = new Scanner(System.in);
		while(true) {
			System.out.println("1개그2나가기");
			int choice = sc.nextInt();
			if(choice == 1) {
				한동석.makeFun();
			}else {
				break;
			}
		}
		*/
	}
}

'웹_프론트_백엔드 > 단과' 카테고리의 다른 글

[단과_JAVA] 2020.02.14  (0) 2020.02.15
[단과_C] 2020.02.13  (0) 2020.02.14
[단과_JAVA] 2020.02.12  (0) 2020.02.12
[단과_JAVA] 2020.02.11  (0) 2020.02.12
[단과_JAVA] 2020.02.10  (0) 2020.02.11