본문 바로가기
Java/시나리오 코드

연습 - 로또 게임

by 개발자공부 2024. 4. 19.

[조건]

☞ 로또 번호는 1부터 45까지이다.

로또 자리는 총 6개이다.

오름차순으로 출력해야 한다.

☞ 첫 번째 문제인 for,if문을 제외하고 중복되는 로또 번호 제외하기

 

↓ for 반복문과 if문으로만 작성했다. (버블정렬)

더보기
더보기

 로또 번호 생성하는 클래스

package basic.exercise;

import java.util.Random;

public class NumberMaker {

	// method
	public static int numberMaker() {

		// Random import
		Random numberMaker = new Random();
		int resultNumber = numberMaker.nextInt(45) + 1;
		// 랜덤 번호 생성은 0부터 입력한 값 이전까지 출력된다.
		// 즉 45를 입력했으니 0 ~ 44까지 출력된다는 의미이다.

		// 1부터 45까지 생성하고 싶다면
		// +1로 한 칸 씩 땡기면 된다.

		return resultNumber;
	}

}// end of class

 

로또 게임 출력하는 클래스

package basic.exercise;

public class LottoGame {

	public static void main(String[] args) {

		// 로또 번호 6개 생성
		int lotto1 = NumberMaker.numberMaker();
		int lotto2 = NumberMaker.numberMaker();
		int lotto3 = NumberMaker.numberMaker();
		int lotto4 = NumberMaker.numberMaker();
		int lotto5 = NumberMaker.numberMaker();
		int lotto6 = NumberMaker.numberMaker();

		int oldBox; // 오름차순으로 만들기 위해 생성한 빈 상자

		for (int pass = 1; pass < 6; pass++) {
			if (lotto1 > lotto2) {
				oldBox = lotto1;
				lotto1 = lotto2;
				lotto2 = oldBox;
			}
			if (lotto2 > lotto3) {
				oldBox = lotto2;
				lotto2 = lotto3;
				lotto3 = oldBox;
			}
			if (lotto3 > lotto4) {
				oldBox = lotto3;
				lotto3 = lotto4;
				lotto4 = oldBox;
			}
			if (lotto4 > lotto5) {
				oldBox = lotto4;
				lotto4 = lotto5;
				lotto5 = oldBox;
			}
			if (lotto5 > lotto6) {
				oldBox = lotto5;
				lotto5 = lotto6;
				lotto6 = oldBox;
			}
		}

		// 출력
		System.out.println(lotto1);
		System.out.println(lotto2);
		System.out.println(lotto3);
		System.out.println(lotto4);
		System.out.println(lotto5);
		System.out.println(lotto6);

	}// end of main

}// end of class

 

↓ array 배열을 이용해 다시 작성해보기 + 중복되는 값 나오지 않도록 하기 (Arrays import해서 오름차순 자동정렬함)

더보기
더보기
package basic.ch13;

import java.util.Arrays;
import java.util.Random;

public class LottoNumberMaker2 {

	/**
	 * 멤버 변수 field
	 */
	private String version = "1.0.0";

	/**
	 * main 함수
	 */
	public static void main(String[] args) {
		int[] lottos = makeNumbers();
		Arrays.sort(lottos); // 오름차순 정렬 메소드
		for (int i = 0; i < lottos.length; i++) {
			System.out.println(lottos[i] + "\t");
		}
	} // end of main

	/**
	 * 인스턴스에 속하지 않는 함수
	 */
	// 번호 만들고, 중복 번호 제외하기
	public static int[] makeNumbers() {

		int[] numbers = new int[6];
		Random random = new Random();

		for (int i = 0; i < numbers.length; i++) {
			numbers[i] = random.nextInt(45) + 1;

			for (int j = 0; j < i; j++) {
				if (numbers[j] == numbers[i]) {
					i--;
					break;
				} // if
			} // inner for

		} // outter for
		return numbers;
	} // end of makeNumbers

	// end of methods

} // end of class

 

↓ Swing으로 로또 게임 출력하기

더보기
더보기

로또 번호 생성

package ch07;

import java.util.Arrays;
import java.util.Random;

// 클래스를 만들때는 단일 책임 원칙을 설정하는 것이 좋다.
public class LottoRandomNumber {

	// constant - final
	final int LOTTO_NUMBER_COUNT = 6;

	/**
	 * 6개의 랜덤 번호를 생성하는 메서드가 필요하다.
	 */
	public int[] createNumber() {

		int[] lottoWinNum = new int[LOTTO_NUMBER_COUNT];
		Random random = new Random();

		for (int i = 0; i < lottoWinNum.length; i++) {
			lottoWinNum[i] = random.nextInt(45) + 1;
			for (int j = 0; j < i; j++) {
				if (lottoWinNum[j] == lottoWinNum[i]) {
					// 값이 중복된 상태이다.
					i--;
				}
			}
		}
		// 중복 제거 완료
		Arrays.sort(lottoWinNum); // 오름차순으로 자동 정렬
		return lottoWinNum;
	}

	// code test
	public static void main(String[] args) {
		LottoRandomNumber randomNumber = new LottoRandomNumber();

		int[] resultArray = randomNumber.createNumber();
		for (int i = 0; i < resultArray.length; i++) {
			System.out.println(resultArray[i]);
		}
	} // end of main

} // end of class

 

Swing으로 화면에 출력

package ch07;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class LottoFrame extends JFrame implements ActionListener {

	private JButton button;
	private LottoRandomNumber lottoRandomNumber;
	private boolean isStart = true;
	private int NUMBER_DISTANCE = 50;

	public LottoFrame() {
		initData();
		setInitLayout();
		addEventListener();
	}

	private void initData() {
		setTitle("Lotto Game");
		setSize(600, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		button = new JButton("Game Start");
		lottoRandomNumber = new LottoRandomNumber();
	}

	private void setInitLayout() {
		add(button, BorderLayout.NORTH);
		setVisible(true);
	}

	private void addEventListener() {
		button.addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("그림을 그려라!");
		// 이벤트가 일어나면 그림을 다시 그려라
		isStart = false;
		repaint();// 다시 그림을 그려라 요청하는 명령어 // F5
	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);

		Font f = new Font("궁서체", Font.BOLD, 20);
		g.setFont(f);

		if (isStart) {
			g.drawString("로또 번호를 클릭하세요", 230, 200);
		} else {
			int[] getNumbers = lottoRandomNumber.createNumber();
//			g.drawString(getNumbers[0] + " ", 100, 300);
//			g.drawString(getNumbers[1] + " ", 120, 300);
//			g.drawString(getNumbers[2] + " ", 140, 300);
//			g.drawString(getNumbers[3] + " ", 160, 300);
//			g.drawString(getNumbers[4] + " ", 180, 300);
//			g.drawString(getNumbers[5] + " ", 200, 300);

			// 반복되는 것에 for문 이용하기
			for (int i = 0; i < getNumbers.length; i++) {
				g.drawString(getNumbers[i] + " ", 150 + (i * NUMBER_DISTANCE), 200);
			}
		}
	}

	// 메인 함수
	public static void main(String[] args) {
		new LottoFrame();
	} // end of main

} // end of class

 

'Java > 시나리오 코드' 카테고리의 다른 글

파일전송  (0) 2024.08.01
JSP 세션 무효화  (0) 2024.07.07
JSP 구구단  (0) 2024.07.07
JSP 폼으로 결과 값 여러 개 받기  (0) 2024.07.04
JSP를 이용한 inch 변환기  (0) 2024.07.03