Skip to content

Instantly share code, notes, and snippets.

@Gumball12
Created October 3, 2018 08:52
Show Gist options
  • Save Gumball12/e29e4b88e5314f8f082bf2653d057e41 to your computer and use it in GitHub Desktop.
Save Gumball12/e29e4b88e5314f8f082bf2653d057e41 to your computer and use it in GitHub Desktop.
Lotto MVC
// *** 로또 ***
// # Rules
// * 숫자는 1 ~ 45
// * 7개의 숫자를 뽑는다
// # Process
// 1. 7개의 숫자를 입력한다
// 2. 1 ~ 45 부터 하나씩 랜덤으로 뽑아가며 총 7개의 숫자를 출력한다.
// 3. 사용자가 입력한 숫자와 랜덤으로 뽑힌 숫자를 비교해 맞은 갯수를 출력한다.
// # Class
// ## Model: 1부터 45까지의 숫자가 오름차순으로 들어있는 배열 데이터
// ## Controler: 입력받는 숫자와 로또 데이터를 이용해 처리
// ## View: 맞은 갯수를 출력
// ## Test: 테스트 전용 클래스. 굳이 Error까지 throw하지는 않았음
// ------
// ------
import java.lang.Math;
import java.util.Scanner;
import java.util.stream.IntStream;
import java.util.Arrays;
// 모델 클래스
class Model {
private int[] data;
public Model () { // constructor
data = new int[45];
for (int i = 0; i < 45; i++) {
data[i] = i + 1;
}
}
public int[] getData () { // Model data인 1~45까지의 숫자가 담긴 배열을 반환
return data;
}
}
// 뷰 클래스
class View {
public void render (String msg) {
System.out.println(msg);
}
}
// 컨트롤러 클래스
class Controller {
private Model model;
private View view;
private int[] inputs;
public Controller (int[] userInputs) {
model = new Model();
view = new View();
inputs = userInputs;
}
public void index () {
int[] data = model.getData();
String msg;
// swap model data
data = swap(data);
// pick [0] ~ [6]
data = pick(data);
// check user input with pick data and get message
msg = getMsg(check(data), data);
// pass data to View
view.render(msg);
}
private int[] swap (int[] data) {
for (int i = 0; i < 45; i++) {
int targetIndex = (int)Math.floor(Math.random() * 45);
int tmp = data[i];
data[i] = data[targetIndex];
data[targetIndex] = tmp;
}
return data;
}
private int[] pick (int[] data) {
int[] returnData = new int[6];
for (int i = 0; i < 6; i++) {
returnData[i] = data[i];
}
return returnData;
}
private int check (int[] data) {
int cnt = 0;
for (int i = 0; i < 6; i++) {
final int input = inputs[i];
final boolean isContain = IntStream.of(data).anyMatch(x -> x == input);
if (isContain) {
cnt++;
}
}
return cnt;
}
private String getMsg (int cnt, int[] data) {
String msg = "총 " + cnt + "개 맞추었습니다.\n입력: " + Arrays.toString(inputs) + "정답: " + Arrays.toString(data);
return msg;
}
}
// 메인 클래스
public class HelloWorld {
public static void main (String[] args) {
Scanner s = new Scanner(System.in);
int[] inputs = new int[6];
for (int i = 0; i < 6; i++) {
inputs[i] = s.nextInt();
}
s.close();
Controller cont = new Controller(inputs);
cont.index();
}
private void test () {
Test test = new Test();
test.modelTest();
test.viewTest();
}
}
// 테스트 클래스
class Test {
public void modelTest () {
System.out.println("// Model 테스트 //");
Model model = new Model();
int[] data = model.getData();
for (int i = 0; i < 45; i++) {
boolean isAvailableData = data[i] == (i + 1);
String msg = i + " 번째 인덱스 테스트... " + (isAvailableData ? "성공" : "실패");
System.out.println(msg);
if (!isAvailableData) { // test fail
break;
}
}
return;
}
public void viewTest () {
System.out.println("// View 테스트 //");
View view = new View();
view.render("테스트 성공");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment