본문 바로가기
JAVA/[JAVA] 바구니

JAVA 구조적인 프로그래밍 Top Down

by oncerun 2020. 2. 28.
반응형

프로그램을 보수할때나 만들어 봤던적이 있는 프로그램은 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();
}

}
반응형

댓글