Q. Lotto 자동생성기를 만드시오.
A. 강사님의 답
import java.util.Random;
class Lotto
{
private int[] lotto;
private Random random;
private final int MAX = 6;
Lotto()
{
lotto = new int[MAX];
random = new Random();
}
public void execute()
{
makeLotto();
sortLotto();
printLotto();
}
public boolean chkNum(int idx)
{
for(int i=0;i<idx;i++)
{
if(lotto[idx]==lotto[i])
{
return false;
}
}
return true;
}
public void makeLotto()
{
for(int i=0;i<lotto.length;i++)
{
lotto[i] = random.nextInt(45)+1;
if( !chkNum(i) )
{
i--;
}
}
}
public void sortLotto()
{
int tmp=0;
for(int i=0;i<lotto.length-1;i++)
{
for(int j=i+1;j<lotto.length;j++)
{
if(lotto[i]>lotto[j])
{
tmp = lotto[i];
lotto[i] = lotto[j];
lotto[j] = tmp;
}
}
}
}
public void printLotto()
{
for(int i=0;i<lotto.length;i++)
System.out.print(lotto[i] + " ");
System.out.println();
}
}
class LottoMain3
{
public static void main(String[] args)
{
Lotto lotto = new Lotto();
for(int i=0;i<5;i++)
lotto.execute();
}
}
A. 내가 생각한 답
import java.util.Random;
class LottoMain
{
public static void main(String[] args)
{
Random rand = new Random();
int [] arr = new int[6];
int num =0;
System.out.println("로또 번호 자동 생성기입니다.");
//난수를 배열에 넣는 로직
for(int i=0;i<arr.length;i++)
{
boolean flag = true;
num=rand.nextInt(45)+1;
for(int j=0;j<arr.length;j++) //같은 숫자가 있는지 찾는 로직
{
if(arr[j]==num)
{
flag = false;
break;
}
}
if(flag) arr[i]=num;
else i--;
}
//정렬하는 로직
int temp=0;
for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[i]>arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
//출력하는 로직
for(int i=0;i<arr.length;i++) System.out.print(arr[i]+"\t");
}
}
Q. 로또 자동생성기를 2차원 배열을 통해 5줄짜리로 출력하시오.
A. 강사님의 답
import java.util.Random;
class Lotto
{
private int[][] lotto;
private Random random;
private final int MAX = 6;
private int numOfLotto = 5; //로또의 갯수
Lotto()
{
lotto = new int[numOfLotto][MAX];
random = new Random();
}
public void execute()
{
makeLottos();
sortLottos();
printLottos();
}
public void makeLottos()
{
for(int i=0;i<numOfLotto;i++)
{
makeLotto(lotto[i]);
}
}
public void sortLottos()
{
for(int i=0;i<numOfLotto;i++)
{
sortLotto(lotto[i]);
}
}
public void printLottos()
{
for(int i=0;i<numOfLotto;i++)
{
printLotto(lotto[i]);
}
}
public boolean chkNum(int idx, int[] lotto)
{
for(int i=0;i<idx;i++)
{
if(lotto[idx]==lotto[i])
{
return false;
}
}
return true;
}
public void makeLotto(int[] lotto)
{
int tmp=0;
for(int i=0;i<lotto.length;i++)
{
lotto[i] = random.nextInt(45)+1;
if( !chkNum(i, lotto) )
{
i--;
}
}
}
public void sortLotto(int[] lotto)
{
int tmp=0;
for(int i=0;i<lotto.length-1;i++)
{
for(int j=i+1;j<lotto.length;j++)
{
if(lotto[i]>lotto[j])
{
tmp = lotto[i];
lotto[i] = lotto[j];
lotto[j] = tmp;
}
}
}
}
public void printLotto(int[] lotto)
{
for(int i=0;i<lotto.length;i++)
System.out.print(lotto[i] + " ");
System.out.println();
}
}
class LottoMain4
{
public static void main(String[] args)
{
Lotto lotto = new Lotto();
lotto.execute();
}
}
Q. 숫자야구게임 만들어보기
프로그램이 만든 난수를 내가 맞춰보는 게임을 만드는 것
유저한테 편한 프로그램을 만드는 것 ex) 567 엔터
자리와 숫자를 전부 맞춰 홈런을 쳤을 때는 cnt로 "몇번 만에 홈런을 치셨습니다."
숫자와 자리를 맞추면 1스트라이크, 숫자만 맞춘 경우 1볼로 한다.
A. 강사님의 답
import java.util.Random;
public class Baseball { // 기능
public static final int MAX = 3;
private int[] baseBall;
private int[] attBaseBall;
private Random rnd;
private final int START_NUM;
private final int END_NUM;
private int bCnt;
private int sCnt;
public Baseball() {
baseBall = new int[MAX];
attBaseBall = new int[MAX];
rnd = new Random();
START_NUM = setStartRange();
END_NUM = START_NUM*10-1;
makeRNum(baseBall);
//printArr(); // 디버깅
}
private int setStartRange()
{
int num = 1;
for(int i=0;i<MAX-1;i++)
num *= 10;
return num;
}
private boolean numRange(int num)
{
if(num<START_NUM || num>END_NUM)
{
System.out.println("숫자는 " + START_NUM + "이상 " + END_NUM + " 이하의 겹치지 않는 숫자여야 합니다.");
return false;
}
else
return true;
}
private void makeRNum(int[] arrNum)
{
while(true)
{
int rNum = rnd.nextInt(END_NUM-START_NUM+1)+START_NUM;
mkArr(arrNum, rNum);
if(chkNumArr(arrNum))
break;
}
}
private void mkArr(int[] arrNum, int num)
{
int divisor = 1;
for(int i=0;i<arrNum.length-1;i++)
divisor *= 10;
for(int i=0;i<arrNum.length;i++)
{
arrNum[i] = num / divisor;
num %= divisor;
divisor /= 10;
}
}
private boolean chkNumArr(int[] arrNum)
{
for(int i=0;i<arrNum.length-1;i++)
{
for(int j=i+1;j<arrNum.length;j++)
{
if(arrNum[i]==arrNum[j])
return false;
}
}
return true;
}
private void printArr()
{
for(int i=0;i<baseBall.length;i++)
System.out.print(baseBall[i]);
System.out.println();
}
public boolean setINum(int num)
{
boolean result = true;
if(numRange(num))
{
mkArr(attBaseBall, num);
result = chkNumArr(attBaseBall);
}
else result = false;
return result;
}
public void playGame()
{
int sCnt = 0;
int bCnt = 0;
for(int i=0;i<baseBall.length;i++)
{
for(int j=0;j<attBaseBall.length;j++)
{
if(baseBall[i] == attBaseBall[j])
{
if(i==j) sCnt++;
else bCnt++;
}
}
}
this.sCnt = sCnt;
this.bCnt = bCnt;
}
public int getSCnt()
{
return sCnt;
}
public void showResult()
{
if(sCnt==MAX)
System.out.println("홈런");
else if(sCnt==0 && bCnt == 0)
System.out.println("아웃");
else
System.out.println(sCnt + " 스트라이크 " + bCnt + " 볼");
}
}
public class BaseballGame {
private Baseball computer;
public BaseballGame() {
this.computer = new Baseball();
}
private boolean attack(int num)
{
if(computer.setINum(num))
return true;
else
return false;
}
public void playBaseballGame(int num)
{
if(attack(num))
{
computer.playGame();
computer.showResult();
}
else
System.out.println("잘못입력하셨습니다.");
}
public int getSCnt()
{
return computer.getSCnt();
}
}
import java.util.Scanner;
public class BaseballGameUI {
public static void main(String[] args) {
BaseballGame bbGame = new BaseballGame();
Scanner sc = new Scanner(System.in);
int iNum = 0;
while(true)
{
System.out.println("자 공격하세요.");
iNum = sc.nextInt();
bbGame.playBaseballGame(iNum);
if(bbGame.getSCnt()==Baseball.MAX)
{
System.out.println("게임을 종료합니다.");
break;
}
}
sc.close();
}
}
Q. 프로그램 사용자로부터 최대 정수 A와 최소 정수 B를 입력 받는다.
그리고 A와 B사이에 존재하는(A와 B도 포함) 난수 10개를 생성해서 출력하는 프로그램을 작성해보자.
A. 강사님의 답
import java.util.Random;
import java.util.Scanner;
public class Q1 {
public static void main(String[] args) {
Random rand = new Random();
Scanner sc = new Scanner(System.in);
int start = 0, end = 0;
start = sc.nextInt();
end = sc.nextInt();
for(int i=0;i<10;i++)
System.out.println(rand.nextInt(end-start+1)+start);
}
}
728x90
'SW > Java' 카테고리의 다른 글
[필기정리]Day 17 - 예외사항(try catch), throwable 클래스 (0) | 2020.07.02 |
---|---|
[필기정리]Day16 - 인터페이스, 전화번호 관리 프로그램 문제 05단계 (0) | 2020.07.01 |
[필기정리]Day14 - 전화번호 관리 프로그램 문제 04단계 (0) | 2020.06.29 |
[필기정리]Day13 - final, 상속 (0) | 2020.06.26 |
[필기정리]Day12 - 상속 (0) | 2020.06.25 |