과제1)
Class Nation을 만들고 행성이름(static), 나라이름(private), 면적(public), 인구수(public)를 멤버 변수로 만들고, 나라이름변경(), 면적변경(), 인구수변경() 메소드를 만드시오.
과제2)
Nation을 상속한 나라 3개를 만들고, 나라별로 특수한 멤버변수 하나를 생성하시오.
Nation.java
public class Nation {
private String country; // 나라이름
public int area; // 면적
public int people; // 인구수
static String planet = "earth"; // 행성이름
String getCountry() {
return country;
}
// 나라이름변경
void setCountry(String country) {
this.country = country;
}
// 면적변경
void setArea(int area) {
this.area = area;
}
// 인구수변경
void setPeople(int people) {
this.people = people;
}
}
// Nation을 상속한 한국 클래스
class Korea extends Nation {
// 김치의 유무 변수
boolean kimchi = true;
// 김치를 먹는 메소드
void eatingKimchi() {
if (this.kimchi) {
System.out.println("김치를 먹었습니다.");
this.kimchi = false;
} else {
System.out.println("김치가 다 떨어졌습니다.ㅠㅠ");
System.out.println("한국에 김치 없는거 실화? 이게 나라냐?");
}
}
}
// Nation을 상속한 미국 클래스
class America extends Nation {
// 미국의 국방비 변수
int militaryBudget = 1000;
// 국방비 소모시 국방비 소모값 적용 후 출력 메소드
void spendMilitaryBudget(int money) {
this.militaryBudget -= money;
System.out.println("국방비가 " + this.militaryBudget + "조 남았습니다.");
}
}
// Nation을 상속한 북한 클래스
class NorthKorea extends Nation {
// 핵의 개수 변수
int nuclear = 0;
// 핵무기 개발 변수
void makeNuclear() {
nuclear++;
System.out.println("핵무기를 " + nuclear + "개 생성하였습니다.");
}
}
NationMain.java
public class NationMain {
public static void main(String[] args) {
Korea korea = new Korea();
korea.eatingKimchi();
korea.eatingKimchi();
America USA = new America();
USA.spendMilitaryBudget(32);
NorthKorea NK = new NorthKorea();
NK.makeNuclear();
NK.makeNuclear();
NK.makeNuclear();
}
}
결과
과제3)
컴퓨터 부품을 class로 작성하고 컴퓨터 부품을 조합하여 컴퓨터 클래스를 완성하시오.
Computer.java
import java.util.ArrayList;
import java.util.Scanner;
// 컴퓨터 완성품 클래스
public class Computer {
Monitor monitor = new Monitor();
public Keyboard keyboard = new Keyboard();
Mouse mouse = new Mouse();
Desktop desktop = new Desktop();
// 모든 제품의 모델명을 출력하는 메소드
public void vueAllModel() {
System.out.println("Monitor : " + this.monitor.model);
System.out.println("keyboard : " + this.keyboard.model);
System.out.println("mouse : " + this.mouse.model);
System.out.println("desktop : " + this.desktop.vueAllProduct());
}
}
// 모니터 클래스
class Monitor {
String model = "X-over 270X 144 Curved"; // 모델명
String color = "black"; // 색상
int inch = 27; // 인치
int resolutionWidth = 1920; // 해상도 가로
int resolutionLength = 1080; // 해상도 세로
int refreshRate = 144; // 주사율
boolean monitorPower; // 전원
String output;
// output내용을 출력하는 메소드
public String getOutput() {
return this.output;
}
// output변수에 값을 넣는 메소드
public void setOutput(String out) {
this.output = out;
}
// 모니터 전원 on/off 메소드
public void powerOnOff() {
this.monitorPower = !this.monitorPower;
}
}
// 키보드 클래스
class Keyboard {
String model = "CORSAIR K65 RAPIDFIRE RGB";
// 입력을 받는 메소드
public String Input() {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
sc.close();
return str;
}
}
// 마우스 클래스
class Mouse {
String model = "Logitech G PRO";
// 마우스 오른쪽 클릭 메소드
public void clickRight() {
System.out.println("Right click!!");
}
// 마우스 왼쪽 클릭 메소드
public void clickLeft() {
System.out.println("Left click!!");
}
}
// 본체 클래스
class Desktop {
String cpu = "AMD Ryzen 5600X";
String mainBoard = "ASUS B550M-K";
String ssd = "Samsung 970 EVO M.2 NVMe";
String memory1;
String memory2 = "GeIL DDR4-3200 8GB";
String memory3;
String memory4 = "GeIL DDR4-3200 8GB";
String VGA = "ZOTAC GeForce GTX1070 MINI D5 8GB";
String power = "SuperFlower SF-650F";
public ArrayList<String> vueAllProduct() {
ArrayList<String> allProduct = new ArrayList<String>();
allProduct.add(cpu);
allProduct.add(mainBoard);
allProduct.add(ssd);
allProduct.add(memory1);
allProduct.add(memory2);
allProduct.add(memory3);
allProduct.add(memory4);
allProduct.add(VGA);
allProduct.add(power);
return allProduct;
}
public void setCPU(String cpu) {
this.cpu = cpu;
}
public void setMainBoard(String mainBoard) {
this.mainBoard = mainBoard;
}
public void setssd(String ssd) {
this.ssd = ssd;
}
public void setMemory1(String memory1) {
this.memory1 = memory1;
}
public void setMemory2(String memory2) {
this.memory2 = memory2;
}
public void setMemory3(String memory3) {
this.memory3 = memory3;
}
public void setMemory4(String memory4) {
this.memory4 = memory4;
}
public void setVGA(String VGA) {
this.VGA = VGA;
}
public void setpower(String power) {
this.power = power;
}
}
ComMain.java
public class ComMain {
public static void main(String[] args) {
Computer computer = new Computer();
computer.vueAllModel();
System.out.println();
System.out.print("키보드 입력 : ");
String str = computer.keyboard.Input();
computer.monitor.setOutput(str);
System.out.println(computer.monitor.getOutput());
System.out.println();
computer.mouse.clickRight();
computer.mouse.clickRight();
}
}
결과
과제4)
객체지향 방식으로 로또번호 추천기 만들기
Lotto.java
import java.util.ArrayList;
import java.util.Collections;
public class Lotto {
LottoNumDto lottoDto = null;
ArrayList<Integer> lottoNum = null;
ArrayList<LottoNumDto> lottoNums = new ArrayList<LottoNumDto>();
public ArrayList<LottoNumDto> LottoNums(int num) {
int randNum = 0;
for (int i = 1; i <= num; i++) {
lottoDto = new LottoNumDto();
lottoNum = new ArrayList<Integer>();
for (int j = 0; j < 7; j++) {
randNum = (int) (Math.random() * 45 + 1);
if (lottoNum.contains(randNum)) {
j--;
} else if (j == 6) {
lottoDto.setBonusNum(randNum);
} else {
lottoNum.add(randNum);
}
}
Collections.sort(lottoNum);
lottoDto.setMainNum(lottoNum);
lottoNums.add(lottoDto);
}
return lottoNums;
}
}
class LottoNumDto {
private ArrayList<Integer> mainNum = new ArrayList<Integer>();
private int bonusNum;
public ArrayList<Integer> getMainNum() {
return mainNum;
}
public void setMainNum(ArrayList<Integer> mainNum) {
this.mainNum = mainNum;
}
public int getBonusNum() {
return bonusNum;
}
public void setBonusNum(int bonusNum) {
this.bonusNum = bonusNum;
}
}
LottoMain.java
import java.util.ArrayList;
import java.util.Scanner;
public class LottoMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Lotto lotto = new Lotto();
System.out.print("로또 몇 줄? : ");
int num = sc.nextInt();
System.out.println();
ArrayList<LottoNumDto> lottos = new ArrayList<LottoNumDto>();
lottos = lotto.LottoNums(num);
printLotto(lottos);
sc.close();
}
static void printLotto(ArrayList<LottoNumDto> lottos) {
for (int i = 0; i < lottos.size(); i++) {
int lineNum = i + 1;
System.out.print(lineNum + " : ");
for (Integer j : lottos.get(i).getMainNum()) {
System.out.print(j + " ");
}
System.out.println(" 보너스 넘버 : " + lottos.get(i).getBonusNum());
}
}
}
결과
과제5)
객체지향 방식으로 가위바위보를 하는데 두명의선수가 무작위로 가위 바위 보를 낸 다음 승부를 출력
RSP.java
import java.util.ArrayList;
public class RSP {
int Choice() {
int result = (int) (Math.random() * 3);
return result;
}
static void Play(int Player1, int Player2) {
ArrayList<String> cho = new ArrayList<String>();
cho.add("가위");
cho.add("바위");
cho.add("보");
System.out.print("Player1 : " + cho.get(Player1));
System.out.println(" Player2 : " + cho.get(Player2));
int result = Player1 - Player2;
System.out.println();
if (result == 0) {
System.out.println("무승부");
} else if (result == -1 || result == 2) {
System.out.println("Player2 승");
} else {
System.out.println("Player1 승");
}
}
}
RSPMain.java
public class RSPMain {
public static void main(String[] args) {
RSP player1 = new RSP();
RSP player2 = new RSP();
RSP.Play(player1.Choice(), player2.Choice());
}
}
결과
과제6)
java.util.Date, java.text.SimpleDataFormat을 임포트하고 현재 날짜를 yyyy-MM-dd hh:mm:ss 형식으로 출력하시오
Today.java
package Day_5_assign.date;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Today {
public static void main(String[] args) {
Date today = new Date();
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(date.format(today));
}
}
결과
과제7)
축구-팀-사람의 구조로 상속 가능한 객체지향 코드를 작성하고, 가위바위보 방식으로 팀별 승리팀을 출력하는 코드를 작성하시오(승리 조건 및 클래스의 속성/메소드는 자유)
※ 축구-팀-사람 구조의 상속이 이해가 잘 되지 않아 그냥 Player을 상속하는 공격수, 미드필더, 수비수를 만들어 적용했습니다. 각각 포지션 별로 슈팅능력치, 패스능력치, 태클능력치가 다른 포지션에 비해 더 좋고 능력치를 컨트롤 할 수 있습니다.
Soccer.java
package Day_5_assign.soccer_Modify;
import java.util.Scanner;
// scooer, team, player을 어떻게 상속시킬지 모르겠어서
// player을 상속한 공격수, 미드필더, 수비수 클래스를 만들었습니다.
public class Soccer {
private Player haveBallP; // 현재 공을 갖고있는 선수 정보
private Team haveBallT; // 공을 갖고있는 팀 정보
private Team otherTeam;
private Team[] allTeam; // 양팀의 모든 정보가 들어있음
Soccer() {
System.out.println("축구 시뮬레이션 게임!!");
System.out.println("=================================");
System.out.println("선수들의 이름을 정해주세요!!");
System.out.println();
}
public Team[] getAllteam() {
return this.allTeam;
}
public void setAllTeam(Team[] allTeam) {
this.allTeam = allTeam;
}
public Player getHaveBallP() {
return this.haveBallP;
}
public Team getHaveBallT() {
return this.haveBallT;
}
public String[] inputPlayeName(String[] playerNames) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < playerNames.length; i++) {
System.out.print(i + 1 + "번 ");
playerNames[i] = sc.nextLine();
}
sc.close();
return playerNames;
}
// 현제 어떤 팀의 어떤 선수가 공을 잡고있는지 세팅하는 메서드
public void setHaveBallPandT() {
for (int team = 0; team < this.allTeam.length; team++) {
for (int kickerNum = 0; kickerNum < this.allTeam[team].playerList.length; kickerNum++) {
if (this.allTeam[team].playerList[kickerNum].ball) {
this.haveBallP = this.allTeam[team].playerList[kickerNum];
this.haveBallT = this.allTeam[team];
if (team == 0) {
this.otherTeam = this.allTeam[1];
} else {
this.otherTeam = this.allTeam[0];
}
break;
}
}
}
}
// 슛 이벤트 발생
public void ShootEvent(Team team1, Team team2, int minute) {
int goalAndmissed = 0;
System.out.println("[" + minute + "분" + "]");
System.out.println(this.haveBallP.getName() + " 슛!!!");
System.out.println();
if (this.haveBallP.shoot() > 2) { // 골이 들어감
this.haveBallT.Goal();
System.out.println("들어갔어요!!!");
System.out.println("현재 스코어 " + team1.score + " : " + team2.score);
goalAndmissed = 0;
} else { // 골이 빗나감
System.out.println("아!! 아쉽게 빗나갑니다.");
goalAndmissed = 5;
}
HaveBallChange(this.haveBallT, this.otherTeam, goalAndmissed);
System.out.println();
}
// 태클 이벤트 발생
public void TackleEvent(Team otherTeam) {
int randPlayerNum = (int) (Math.random() * haveBallT.playerList.length);
System.out.println(otherTeam.playerList[randPlayerNum].getName() + "선수의 태클!!");
if (otherTeam.playerList[randPlayerNum].tackle() > 1) {
System.out.println("실패합니다~~");
} else {
System.out.println("성공합니다!!");
randPlayerChange(otherTeam, randPlayerNum);
System.out.println("공은 " + this.haveBallP.getName()
+ "선수에서 " + otherTeam.playerList[randPlayerNum].getName()
+ "선수로 넘어갑니다!!");
}
}
// 패스 이벤트 발생
public void PassEvent(int event) {
int nextPlayer = 0;
while (true) {
nextPlayer = (int) (Math.random() * this.haveBallT.playerList.length);
if (!haveBallT.playerList[nextPlayer].ball) { // 패스할 시 같은 선수 나오는 것 방지
break;
}
}
System.out.println(this.haveBallP.getName() + " 선수가 "
+ haveBallT.playerList[nextPlayer].getName() + "선수에게 패스합니다.");
if (this.haveBallP.pass() == 0) { // 패스 실수
PassMissed(event);
} else { // 패스 성공
this.haveBallP.ballStateChange();
haveBallT.playerList[nextPlayer].ballStateChange();
}
System.out.println();
}
// 패스 실수 이벤트 발생
public void PassMissed(int event) {
int nextPlayer = 0;
int whatTeam = 0;
while (true) {
nextPlayer = (int) (Math.random() * this.haveBallT.playerList.length);
whatTeam = (int) (Math.random() * 2);
if (!allTeam[whatTeam].playerList[nextPlayer].ball) { // 패스할 시 같은 선수 나오는 것 방지
break;
}
}
System.out.println("아!!" + this.haveBallP.getName() + "선수 왜 저렇게 패스하죠?!");
this.haveBallP.ballStateChange();
allTeam[whatTeam].playerList[nextPlayer].ballStateChange();
// 랜덤한 선수에게 공이감
System.out.println("공은 " + allTeam[whatTeam].playerList[nextPlayer].getName() + "선수에게 갔습니다.");
if (this.getHaveBallT() != allTeam[whatTeam]) {
event -= event - 1;
}
}
// 슛을 쏘고 골이 들어가거나, 빗나갔을 때 공을 상대선수에게 넘겨주는 메서드
public void HaveBallChange(Team team1, Team team2, int playerNum) {
this.haveBallP.ballStateChange();
if (this.haveBallT == team1) { // 볼 갖고있는 팀 변경
team2.playerList[playerNum].ballStateChange();
} else {
team1.playerList[playerNum].ballStateChange();
}
}
// 태클을 걸릴 시 태클을 건 선수로 공이 넘어감
public void randPlayerChange(Team otherTeam, int randPlayerNum) {
haveBallP.ballStateChange();
otherTeam.playerList[randPlayerNum].ballStateChange();
}
}
class Team {
String teamName;
int score = 0;
// 선수 생성
Player[] playerList = { new PlayerFW(), new PlayerFW(), new PlayerMD(), new PlayerMD(), new PlayerDF(),
new PlayerDF() };
public void Goal() {
this.score++;
}
}
class Player {
private String name;
Boolean ball = false;
int baseShoot = 4; // 기본 슈팅 능력치
int basePass = 5; // 기본 패스 능력치
int baseTackle = 3; // 기본 태클 능력치
public int shoot() {
int result = (int) (Math.random() * this.baseShoot);
return result;
}
public int pass() {
int result = (int) (Math.random() * this.basePass);
return result;
}
public int tackle() {
int result = (int) (Math.random() * this.baseTackle);
return result;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public void ballStateChange() {
this.ball = !this.ball;
}
}
class PlayerFW extends Player {
@Override
public int shoot() {
int result = (int) (Math.random() * super.baseShoot + 3); // 공격수 슈팅 능력
return result;
}
}
class PlayerMD extends Player {
@Override
public int pass() {
int result = (int) (Math.random() * super.basePass + 3); // 미드필더 패스 능력
return result;
}
}
class PlayerDF extends Player {
@Override
public int tackle() {
int result = (int) (Math.random() * super.baseTackle + 2); // 수비수 태클 능력
return result;
}
}
SoccerMain.java
package Day_5_assign.soccer_Modify;
public class SoccerMain {
public static void main(String[] args) {
Soccer soccer = new Soccer();
int playerNum = 6;
String[] team1Names = new String[playerNum];
String[] team2Names = new String[playerNum];
// 원래는 직접 입력해야함
// System.out.println("1팀 입력");
// team1Names = soccer.inputPlayeName(team1Names);
// System.out.println();
// System.out.println("2팀 입력");
// team2Names = soccer.inputPlayeName(team2Names);
String[] exTeam1Names = { "메시", "날강두", "피를로", "베컴", "피케", "푸욜" };
String[] exTeam2Names = { "손흥민", "케인", "박지성", "제라드", "라모스", "퍼디난드" };
for (int i = 0; i < exTeam1Names.length; i++) {
team1Names[i] = exTeam1Names[i];
team2Names[i] = exTeam2Names[i];
}
System.out.print("1팀 : ");
for (String s : team1Names) {
System.out.print(s + " ");
}
System.err.println();
System.out.print("2팀 : ");
for (String s : team2Names) {
System.out.print(s + " ");
}
System.out.println();
System.out.println();
Team team1 = new Team();
Team team2 = new Team();
Team[] allTeam = { team1, team2 };
soccer.setAllTeam(allTeam);
for (int i = 0; i < team1Names.length; i++) {
team1.playerList[i].setName(team1Names[i]);
}
for (int i = 0; i < team2Names.length; i++) {
team2.playerList[i].setName(team2Names[i]);
}
System.out.println("경기 시작합니다!!");
System.out.println("==========================================================");
int startHaveBall = (int) (Math.random() * 2);
allTeam[startHaveBall].playerList[0].ballStateChange(); // 경기 시작시 랜덤한 팀의 1번 선수에서 시작
for (int minute = 0; minute <= 90; minute += (int) (Math.random() * 10)) {
soccer.setHaveBallPandT();
System.out.println("현재 공은 " + soccer.getHaveBallP().getName() + "선수에게 있습니다.");
System.out.println();
int randEvent = (int) (Math.random() * 8) + 3;
for (int event = 0; event < randEvent; event++) { // 1회마다 이벤트 발생 슛을 날릴시 1회 종료
soccer.setHaveBallPandT();
if (event == randEvent - 1) {
soccer.ShootEvent(team1, team2, minute);
} else {
if ((int) (Math.random() * 4) == 0) { // 태클 거는 이벤트가 나올 확율 1/4
if (soccer.getHaveBallT() == team1) {
soccer.TackleEvent(team2);
} else {
soccer.TackleEvent(team1);
}
event -= event - 1;
System.out.println();
} else { // 패스
soccer.PassEvent(event);
}
}
minute += 1;
if (minute == 90) {
break;
}
}
}
System.out.println("==========================================================");
System.err.println("경기 종료합니다!!!");
System.out.println("최종 스코어 " + team1.score + " : " + team2.score);
if (team1.score > team2.score) {
System.out.println("Team1 win!!");
} else if (team1.score < team2.score) {
System.out.println("Team2 win!!");
} else {
System.out.println("무승부");
}
}
}
결과