멀티캠퍼스 1주차 JAVA과제

Hyeon_Su_Lee·2022년 1월 3일
0
post-custom-banner

요약

  • Nation
  • Computer
  • Lotto
  • RSP
  • Today
  • Soccer

Nation

과제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();
    }
}

결과


Computer

과제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();
    }
}

결과


Lotto

과제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());
        }
    }
}

결과


RSP

과제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());
    }
}

결과


Today

과제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));
    }
}

결과


Soccer

과제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("무승부");
        }
    }
}

결과

º º º

profile
어제 보다 오늘 더 발전하는 개발자
post-custom-banner

0개의 댓글