반응형
프로그램을 보수할때나 만들어 봤던적이 있는 프로그램은 Bottom Up방식으로 충분히 가능하지만,
프로그램이 없을때 만드는 방식은 TopDown방식이다.
예제인 Lotto생성기를 만들어보겠다.
순서도
LottoProgram 순서도 |
메뉴를 만들고 입력값에따라 메뉴에서 이동 |
메뉴종류(자동,수동,출력,종료) |
만약 자동이면 랜덤하게 6개의 숫자를 뽑음 원하는만큼 반복이 가능해야함 뽑은값을 출력해서 보여줌 저장하는 옵션과 상위메뉴로 돌아가는 옵션이필요함 |
만약 수동이면 숫자 6개를 연속적으로 입력한뒤 자동이랑 옵션이같아야함. |
자동,수동으로 뽑은 로또를 저장하면 상위메뉴로 이동해서 출력을 눌러야함 |
출력시 저장된 로또번호가 전부나옴. 자동,수동 |
종료 |
1. 구조 잡기
import java.util.Random;
import java.util.Scanner;
public class Program2 {
public static void main(String[] args) {
int[][] lottos = null;
int menu;
boolean running = true;
while (running) {
// 처음 화면 menu는 switch문이 좋다.
menu = inputMenu();
switch (menu) {
// 1.Lotto번호 자동 생성
case 1:
lottos = createLottsAuto();
break;
case 2:
// 2. Lotto번호 수동 생성
lottos = createLottosMenual();
break;
case 3:
//3. Lotto번호 출력
printLottos(lottos);
break;
case 4:
//4. 종료
running = false;
default:
}
}
}
private static void printLottos(int[][] lottos) {
}
private static int[][] createLottosMenual() {
return null;
}
private static int[][] createLottsAuto() {
return null;
}
private static int inputMenu() {
return 0;
}
}
2.자동 로또출력하기.
import java.util.Random;
import java.util.Scanner;
public class Program2 {
public static void main(String[] args) {
int menu = 0;
boolean running = true;
int[][] lottos = null;
while (running) {
// 처음 화면 menu는 switch문이 좋다.
menu = inputMenu(menu);
switch (menu) {
// 1.Lotto번호 자동 생성
case 1:
lottos = createLottsAuto(lottos);
break;
case 2:
// 2. Lotto번호 수동 생성
lottos = createLottosMenual();
break;
case 3:
//3. Lotto번호 출력
printLottos(lottos);
break;
case 4:
//4. 종료
running = false;
default:
System.out.println("1~4사이의 숫자를 입력하세요.");
}
}
}
private static int[][] printLottos(int[][] lottos) {
return lottos;
}
private static int[][] createLottosMenual() {
return null;
}
static int[][] createLottsAuto(int[][] lotto) {
Scanner scan = new Scanner(System.in);
Random ra = new Random(45);
System.out.println("몇개를 출력하시겠습니까?");
System.out.println("입력");
int count = scan.nextInt();
lotto = new int[count][6];
for(int j = 0; j <count; j++) {
System.out.printf("%d번째 로또번호입니다. ",j+1);
for(int i = 0; i<6; i++) {
lotto[j][i] = ra.nextInt(45)+1;
System.out.printf("%d ",lotto[j][i]);
}
System.out.println();
}
return lotto;
}
static int inputMenu(int menu) {
Scanner scan = new Scanner(System.in);
System.out.println();
System.out.println("1.Lotto번호 자동 생성");
System.out.println("2.Lotto번호 수동 생성");
System.out.println("3.Lotto번호 확인 하기");
System.out.println("4.LottoProgram 종료");
System.out.println("입력 >");
menu = scan.nextInt();
return menu;
}
}
3. 자동로또를 함수형태로 정리했다.
package EX01함수;
import java.util.Random;
public class lotto {
public static void main(String[] args) {
Random rand = new Random();
int[] lotto = new int[6];
// 로또 번호를 생성하고
createLotto(lotto, rand);
// 로또 번호의 중복을 제거
deduplLotto(lotto,rand);
// 번호를 오름차순으로정렬해서
sortLotto(lotto);
// 로또 번호를 출력한다.
printLotto(lotto);
}//main
public static void deduplLotto(int[] lotto, Random rand) {
for (int i = 0; i < 6; i++) {
lotto[i] = rand.nextInt(45) + 1;
for (int j = 0; j < i; j++) {// 로또 번호 중복제거
if (lotto[i] == lotto[j]) {
i--;
}
}
}
}
public static void createLotto(int[] lotto, Random rand) {
for(int i=0; i<6; i++)
lotto[i] = rand.nextInt(45)+1;
}
public static void sortLotto(int[] lotto) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5-i; j++) {
if (lotto[j] > lotto[j+1]) {
int temp = lotto[j+1];
lotto[j+1] = lotto[j];
lotto[j] = temp;
}
}
}
}
public static void printLotto(int[] lotto) {
for(int i=0; i<6; i++)
System.out.printf("%d ", lotto[i]);
System.out.println();
}
}
4.자동,수동 가벼운형태
package EX03함수TopDown;
import java.util.Random;
import java.util.Scanner;
public class Program1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random rand = new Random();
int[] lotto = new int[6];
EX:while(true) {
System.out.println("로또로또");
System.out.println("1.자동");
System.out.println("2.수동");
System.out.println("3.출력");
System.out.println("4.종료");
int menu = scan.nextInt();
switch(menu) {
case 1:
//자동
lotto=genAuto(lotto,rand);
break;
case 2:
//수동
lotto=genManual(lotto);
break;
case 3:
//출력
printLotto(lotto);
break;
case 4:
System.out.println("종료");
break EX ;
//
}
}
//자동/수동로또
// 로또 번호를 생성하고
// 로또 번호의 중복을 제거
// 번호를 오름차순으로정렬해서
// 로또 번호를 출력한다.
}//main
public static int[] genAuto(int[] lotto, Random rand) {
createLotto(lotto, rand);
deduplLotto(lotto,rand);
sortLotto(lotto);
return lotto;
}
public static int[] genManual(int[] lotto) {
Scanner scan = new Scanner(System.in);
System.out.println("6개의 로또번호를 입력해주세요");
for(int i =0; i <6; i++) {
lotto[i]=scan.nextInt();
}
return lotto;
}
public static void deduplLotto(int[] lotto, Random rand) {
for (int i = 0; i < 6; i++) {
lotto[i] = rand.nextInt(45) + 1;
for (int j = 0; j < i; j++) {// 로또 번호 중복제거
if (lotto[i] == lotto[j]) {
i--;
}
}
}
}
public static void createLotto(int[] lotto, Random rand) {
for(int i=0; i<6; i++)
lotto[i] = rand.nextInt(45)+1;
}
public static void sortLotto(int[] lotto) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5-i; j++) {
if (lotto[j] > lotto[j+1]) {
int temp = lotto[j+1];
lotto[j+1] = lotto[j];
lotto[j] = temp;
}
}
}
}
public static void printLotto(int[] lotto) {
for(int i=0; i<6; i++)
System.out.printf("%d ", lotto[i]);
System.out.println();
}
}
반응형
'JAVA > [JAVA] 바구니' 카테고리의 다른 글
객체 지향 프로그래밍이란? (0) | 2020.03.09 |
---|---|
java.lang.NullPointerException 오류1 (0) | 2020.03.03 |
JAVA 구조적인 프로그래밍 Bottom Up (0) | 2020.02.28 |
성적 입출력 프로그램 중 오류 (0) | 2020.02.27 |
JAVA 연산자 -1 (0) | 2020.02.20 |
댓글