Created
October 3, 2018 08:52
-
-
Save Gumball12/e29e4b88e5314f8f082bf2653d057e41 to your computer and use it in GitHub Desktop.
Lotto MVC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// *** 로또 *** | |
// # 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