Jam's story

9일차 본문

Java

9일차

애플쩀 2022. 2. 25. 17:38
로또 프로그램 
package days09;

import java.util.Random;

/**
 * @author kenik
 * @date 2022. 2. 25. - 오후 12:29:18
 * @subject 
 * @content 
 */
public class Ex04_02 {

	public static void main( String[] args ) {
		// [로또645]
		// ㄱ.  (int)(Math.random()*45) +1
		// ㄴ.  rnd.nextInt(45)+1  
 
		// Returns a pseudorandom, uniformly distributed
		// int value  between 0 (inclusive) and the specified value (exclusive),
		// 0 <= int   < 45
		// 1 <=   int < 45
		/*
		for (int i = 0; i < 6; i++) {
			System.out.println( rnd.nextInt(45)+1  );
		} 
		*/
		
		// 배열 선언 후 초기화 X
		// *** 참조형은 초기화 하지 않아도 기본값으로 초기화가 되어져 있다.
		// int []의 각 요소의  기본값은  0 이다. 
		int [] lotto = new int[6];
		
		// 로또 번호를 랜덤하게 발생시켜서 lotto 배열에 채워넣는 함수(메서드)
		fillLotto( lotto );

		// 배열이라는 참조형이 매개변수              Call By Reference
		dispLotto( lotto );
	} // main

	public static boolean isDuplicateLotto(int [] lotto, int idx, int temp) {
		boolean flag = false;
		for (int i = 0; i < idx; i++) {
			if( temp == lotto[i]) {
				flag = true;
				break;
			}
		}
		return flag;
	}
	
	// 1. 기능  2. 매개변수  3. 리턴값(리턴자료형(
	private static void fillLotto(int[] lotto) {
		// 2:00 시작~ 
		// Random 클래스(물건) jdk 1.5
		Random  rnd = new Random();		
        int idx = 0;		
		while(  idx <= 5 ) { 
			int temp = rnd.nextInt(45) + 1;  
			System.out.println(temp);
			if( !isDuplicateLotto(lotto, idx, temp)   ) {
				lotto[idx++] = temp;
			} 
		} // while
		
		// 2:25 로직(알고리즘) 코딩.
		
		/*
		for (int i = 0; i < lotto.length; i++) {
			lotto[i] =  rnd.nextInt(45)+1  ; 
		}
		*/
		
		/*
		lotto[0] =  rnd.nextInt(45)+1  ;  // 7
		
		// 0   중복체크
		lotto[1] = rnd.nextInt(45)+1  ;   // 20
		
		// 0 1  중복체크
		lotto[2] =  rnd.nextInt(45)+1  ;  // 5
		
		// 0 1 2 중복체크
		lotto[3] =  rnd.nextInt(45)+1  ;  // 5
		
		// 0 1 2 3 중복체크
		lotto[4] =  rnd.nextInt(45)+1  ;  // 5
		
		// 0 1 2 3 4 중복체크
		lotto[5] =  rnd.nextInt(45)+1  ;  // 5
		*/
		
	} // fillLotto

	private static void dispLotto(int[] lotto) {
		// 배열명.length == 배열크기  == 6
		for (int i = 0; i < lotto.length; i++) {
		     System.out.printf("[%d]", lotto[i]);
		}
		System.out.println(); // 개행
		
	} // dispLotto

} // class

/*
31
6
9
44
33
29
*/

/*
private static void fillLotto(int[] lotto) {
      
      Random rnd = new Random();
      
      lotto[0] = rnd.nextInt(45)+1; //7
   
      //lotto[1] = rnd.nextInt(45)+1;      
      do {
         lotto[1] = rnd.nextInt(45)+1;
      } while (lotto[0]==lotto[1]);
      
      //lotto[2] = rnd.nextInt(45)+1;
      do {
         lotto[2] = rnd.nextInt(45)+1;
      } while (lotto[0]==lotto[2] || lotto [1]==lotto[2]);
      
      //lotto[3] = rnd.nextInt(45)+1;
      do {
         lotto[3] = rnd.nextInt(45)+1;
      } while (lotto[0]==lotto[3] || lotto [1]==lotto[3]|| lotto [2]==lotto[3]);
      
      //lotto[4] = rnd.nextInt(45)+1;
      do {
         lotto[4] = rnd.nextInt(45)+1;
      } while (lotto[0]==lotto[4] || lotto [1]==lotto[4]|| lotto [2]==lotto[4]|| lotto [3]==lotto[4]);
      
      //lotto[5] = rnd.nextInt(45)+1;
      do {
         lotto[5] = rnd.nextInt(45)+1;
      } while (lotto[0]==lotto[5] || lotto [1]==lotto[5]|| lotto [2]==lotto[5]|| lotto [3]==lotto[5]|| lotto [4]==lotto[5]);
      
   }//fillLotto
 */

/* 로직 X
private static void fillLotto(int[] lotto) {
      Random rnd = new Random();
      for ( int i = 0; i < lotto.length; i++) { // i 0 [1] 2 3 4 5
       
       
         lotto [i] = rnd.nextInt(45)+1;   //lotto[0]=7       lotto[1]=7
         
         // X
         for ( int n = 0; n <= i-1;n++) {
              if(lotto [n] ==  lotto[i])
                  lotto [i] = rnd.nextInt(45)+1;  // 7
         }
}
 */

/*  X
     Random rnd = new Random();
      
      for (int i = 0; i < lotto.length; i++) {  // i  [0] 1 2 3 4 5
        // 중복체크  i -1
         for (int j = 0; j < 0; j++) {         
            do {
               lotto[i] = rnd.nextInt(45)+1;   // lotto[0] = 7
            } while (lotto[i] == lotto[j]);
         }//j for
      }//i for
 */

/*  [O]
private static void fillLotto(int[] lotto) {
    Random rnd = new Random();
    
     lotto[0] = rnd.nextInt(45)+1; //
    
    // 채워넣는 배열의 위치(인덱스, 첨자값)
    for (int i = 1; i < lotto.length; i++) {          // i =  0 [1] 2 3 4 5
       
       lotto[i] = rnd.nextInt(45)+1; //                   *** lotto[0] = 7            lotto[1]= 7

        // 채워져 있는 배열의 요소 == 중복 체크
       for (int j = 0; j < 1; j++) { // lotto[0] ~ [i-1] 까지 [i]와 중복 되었나 체크

          if (lotto[0] == lotto[1]) {
             System.out.printf("lotto[%d] %d\n", j, lotto[j]); // [디버깅] 중복된 수 확인용
             System.out.printf("lotto[%d] %d 중복\n \n", i, lotto[i]); // [j]와 [i] 번째에 중복
             i--; // i 번째 다시 시행 위함
             break; // 중복 있을경우 i - 1 시키고 안쪽 for문 탈출

          } // if

       } // for2
    } // for1
 }// fillLotto

*/

/*
private static void fillLotto(int[] lotto) {
      Random rnd = new Random();

      lotto[0] = rnd.nextInt(45) + 1;   // lotto[0] = 7
      
      for (int i = 1; i < lotto.length; i++) {        // i   1 2 3 4 5
      
         lotto[i] = rnd.nextInt(45) + 1;      // lotto[1] =7
         
         for (int j = 0; j < i; j++) {
             while (lotto[i]==lotto[j]) {
                  lotto[i] = rnd.nextInt(45) + 1;
             }
         }
      }
   }//fillLotto
 * */
팩토리얼

음수값을 입력한다면 

거듭제곱 -power 

최종코딩

  • 삼항연산자 사용
  •  int n=Math.abs()를 넣어 (for문 조건식에가 아닌 ) 함수 호출수를 줄여서 효율성을 높인다. 
Math.abs() 절대값 구하는 함수 

Random 클래스 (Math.random() 대체) 

두가지방법 

지역변수는 초기화 안하면 오류인데, 참조형은 기본값으로 초기화됨

int 의 기본값은 0

 

 

 

fillLotto

등차수열 

-

 

'Java' 카테고리의 다른 글

11일차  (0) 2022.03.03
10일차  (0) 2022.03.02
8일차  (0) 2022.02.24
7일차  (0) 2022.02.23
5일차  (0) 2022.02.21
Comments