야구게임
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
/**
* 숫자 야구 게임 프로그램 만들기
* 컴퓨터의 숫자는 난수를 이용하여 구한다. (1~9사이는 중복되지 않은 난수 3개)
* (스트라이크는 S, 볼은 B로 나타낸다.)
*/
public class BaseBallTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashSet<Integer> set = new HashSet<Integer>();
while(set.size()<3) {
set.add((int) (Math.random()*9)+1);
}
ArrayList<Integer> num = new ArrayList<Integer>(set);
Collections.shuffle(num);
int count = 0;
while(true) {
count++;
int s = 0;
int b = 0;
System.out.print("숫자 입력 >> ");
int input = sc.nextInt();
int num1 = (input%100)%10; //1
int num2 = (input%100)/10; //10
int num3 = input/100; //
if(!set.add(num1)) {
if(num.get(2)==num1) {
s++;
} else {
b++;
}
} else {
// 만약 없는경우 추가되었으니 제거
set.remove(num1);
}
if(!set.add(num2)) {
if(num.get(1)==num2) {
s++;
} else {
b++;
}
}else {
set.remove(num2);
}
if(!set.add(num3)) {
if(num.get(0)==num3) {
s++;
} else {
b++;
}
}else {
set.remove(num3);
}
if(s==3) {
System.out.println("축하합니다.");
System.out.println("당신은 "+count+"번째만에 맞췄습니다");
break;
} else {
System.out.println(input+" ==> "+s+"S "+b+"B");
continue;
}
}
}
}
더보기
메서드를 나눠서 하기
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
/**
* 숫자 야구 게임 프로그램 만들기 컴퓨터의 숫자는 난수를 이용하여 구한다. (1~9사이는 중복되지 않은 난수 3개) (스트라이크는 S, 볼은
* B로 나타낸다.)
*/
public class BaseBallTest {
private ArrayList<Integer> numList; // 난수 저장할 List
private ArrayList<Integer> userList; // 사용자가 입력한 값을 저장
private Scanner scan;
private int strike, ball; // 스트라이크와 볼의 개수가 저장될 변수 선언
// 생성자
public BaseBallTest() {
scan = new Scanner(System.in);
}
public static void main(String[] args) {
new BaseBallTest().gameStart(); // main은 static이기 때문에 객체 생성을 해야함
}
// 시작 메서드
public void gameStart() {
int count = 0;
// 난수를 만드는 메서드 호출
createNum();
// 확인용 출력
// System.out.println("컴퓨터의 난수 ==> " + numList);
do {
count++;
// 사용자 입력 메서드 호출
inputNum();
// 볼카운트하는 메서드 호출
ballCount();
} while(strike!=3);
System.out.println("축하합니다.");
System.out.println("당신은 " + count + "번째 만에 맞췄습니다");
}
// 1~9 사이의 중복되지 않는 난수 3개를 만들어서 List에 저장하는 메서드 (Set)
private void createNum() {
Set<Integer> numSet = new HashSet<Integer>();
// 3개의 난수 만들기
while (numSet.size() < 3) {
numSet.add((int) (Math.random() * 9) + 1);
}
// 만들어진 난수를 List에 저장하기
numList = new ArrayList<Integer>(numSet);
// 데이터 섞기
Collections.shuffle(numList);
}
// 사용자로부터 3개의 정수를 입력 받아 List에 저장하는 메서드
// 입력한 값들은 중복되지 않게 한다.
private void inputNum() {
int n1, n2, n3; // 입력한 값이 저장될 변수
do {
System.out.print("숫자 입력 >> ");
int input = scan.nextInt();
n1 = scan.nextInt();
n2 = scan.nextInt();
n3 = scan.nextInt();
// n3 = (input % 100) % 10; // 1
// n2 = (input % 100) / 10; // 10
// n1 = input / 100; //
if (n1 == n2 || n1 == n3 || n2 == n3) {
System.out.println("중복되는 숫자는 입력할 수 없습니다. 다시 입력하세요");
}
} while (n1 == n2 || n1 == n3 || n2 == n3);
// 입력한 값을 List에 저장한다
userList = new ArrayList<Integer>();
userList.add(n1);
userList.add(n2);
userList.add(n3);
}
// 스크라이트와 볼판정 및 판정 결과를 출력하는 메서드
private void ballCount() {
strike = 0;
ball = 0;
for (int i = 0; i < userList.size(); i++) {
for (int j = 0; j < numList.size(); j++) {
if (userList.get(i) == numList.get(j)) {
if (i == j) {
strike++;
} else {
ball++;
}
}
}
}
// 볼카운트 결과 출력하기
System.out.println(
userList.get(0) + " " + userList.get(1) + " " + userList.get(2) + " ==> " + strike + "S " + ball + "B");
}
}
로또생성기
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
public class LottoStore {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("==========================");
System.out.println("Lotto 프로그램");
System.out.println("--------------------------");
System.out.println("1. Lotto 구입");
System.out.println("2. 프로그램 종료");
System.out.println("==========================");
System.out.print("메뉴선택 : ");
int sel = sc.nextInt();
if (sel != 1) {
System.out.println("감사합니다");
break;
}
System.out.println();
System.out.println("Lotto 구입 시작");
System.out.println();
System.out.println("(1000원에 로또번호 하나입니다.)");
System.out.print("금액 입력 : ");
int money = sc.nextInt();
if(money<1000) {
System.out.println("입력급액이 너무 적습니다. 로또번호 구입실패!!!");
continue;
} else if(money>100000){
System.out.println("입력 금액이 너무 많습니다. 로또번호 구입실패!!!");
continue;
}
int count = money / 1000;
System.out.println("행운의 로또 번호는 아래와 같습니다.");
for (int i = 0; i < count; i++) {
int no = i+1;
System.out.print("로또번호"+no+" : ");
HashSet<Integer> lotto = new HashSet<Integer>();
while (lotto.size() < 6) {
lotto.add((int) (Math.random() * 45 + 1));
}
ArrayList<Integer> list = new ArrayList<Integer>(lotto);
Collections.sort(list);
System.out.println(list);
}
System.out.println();
int a = money%1000;
System.out.println("받은 금액은 "+money+"원이고 거스름돈은 "+a+"원입니다.");
System.out.println();
continue;
}
}
}
더보기
메서드를 나눠서 하기
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
public class LottoStore {
private Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
new LottoStore().lottoStart();
}
// 시작 메서드
public void lottoStart() {
while (true) {
int choice = displayMenu();
switch (choice) {
case 1:
int money = buyLotto();
printLotto(money);
continue;
case 2:
System.out.println("감사합니다");
return;
default:
System.out.println("작업 번호를 잘못 입력했습니다.");
System.out.println("'1'또는 '2'를 입력하세요.");
}
}
}
// 메뉴를 출력하고 작업 번호를 입력 받아 반환하는 메서드
private int displayMenu() {
System.out.println();
System.out.println("==========================");
System.out.println(" Lotto 프로그램");
System.out.println("--------------------------");
System.out.println(" 1. Lotto 구입");
System.out.println(" 2. 프로그램 종료");
System.out.println("==========================");
System.out.print("메뉴선택 : ");
return scan.nextInt();
}
// 로또 구매를 처리하는 메서드
private int buyLotto() {
while (true) {
System.out.println();
System.out.println("Lotto 구입 시작");
System.out.println();
System.out.println("(1000원에 로또번호 하나입니다.)");
System.out.print("금액 입력 : ");
int money = scan.nextInt();
if (money < 1000) {
System.out.println("입력급액이 너무 적습니다. 로또번호 구입실패!!!");
continue;
} else if (money > 100000) {
System.out.println("입력 금액이 너무 많습니다. 로또번호 구입실패!!!");
continue;
}
return money;
}
}
private void printLotto(int money) {
int count = money / 1000;
System.out.println("행운의 로또 번호는 아래와 같습니다.");
for (int i = 0; i < count; i++) {
int no = i+1;
System.out.print("로또번호"+no+" : ");
HashSet<Integer> lotto = new HashSet<Integer>();
while (lotto.size() < 6) {
lotto.add((int) (Math.random() * 45 + 1));
}
ArrayList<Integer> list = new ArrayList<Integer>(lotto);
Collections.sort(list);
System.out.println(list);
}
System.out.println();
int a = money%1000;
System.out.println("받은 금액은 "+money+"원이고 거스름돈은 "+a+"원입니다.");
System.out.println();
}
}
메서드를 나눠서 쓰는 연습할 것
'JAVA > HIGH JAVA' 카테고리의 다른 글
[JAVA] Map (0) | 2024.04.24 |
---|---|
[JAVA] Equals HashCode (0) | 2024.04.24 |
[JAVA] Set (0) | 2024.04.23 |
[JAVA] Stack, Queue, (홈페이지 뒤로가기 구현), 정렬(Sort) (1) | 2024.04.22 |
[JAVA] 인코딩 설정, Collection (1) | 2024.04.19 |