jsp&servlet 기본 구조를 공부하다가, DB가 필요하여 오픈소스이며 무료DB라고 하는 maridDB를 사용하기로 정한 후,

책사서 잠시 공부하다가 갑자기 로또번호 생성기 정도 코드는 작성 할 수 있지 않을까 싶어 갑자기 작성해보았다.

이거 작성하는데 한 일주일 걸린 것 같다. 육아하면서 새벽 및 회사에서 간간히 작성하여 완성시켰다.

코드는 이틀안에 대충 작성 했는데, 자꾸 결과 값을 두 번 출력하고 로직이 제대로 수행이 안되서 검색해보고 무슨 메서드를 썼는지, 써야하는지 지식인들 질문 및 답변도 보고 (소스코드는 안봤음), 뭐 여튼 그렇게 해서 오늘 완성 시켰다.

어젯밤 로직을 완전히 바꿔야겠다 생각했다가, 오늘 회사에서 '무한 반복'에 대해 검색해보다가 while 문이 무한으로 돌아가는지 알게되서 while문을 추가 시켜 해결 했다.

쓴 기능은 배열, while, if, try&catch, Arrays.equals(boolean[] a, boolean[] b), Math.random() 이다.

코드를 공개합니다.


package com.test;

import com.test.LottoGeneration;

import java.util.Arrays; //배열 클래스에 있는 equals 메서드가 필요했음.

public class LottoGeneration {

public static int[] clnumber = new int[6]; // 6개의 번호를 저장할 공간 생성

void Ngeneration(){ // 번호 생성 메서드

  System.out.println("번호 생성 시작");

  for(int i=0; i<clnumber.length; i++){

    clnumber[i]=(int)(Math.random()*46);

  }

}

void filter(boolean conf){ //중복번호, 0번 걸러내는 메서드

  boolean zero[] = new boolean[6]; // 0번이 있는지에 대한 검사 결과 저장 공간

  boolean same[] = new boolean[6]; // 중복번호가 있는지에 대한 검사 결과 저장 공간

  int indexno=0; // 배열 번호 지정자

  try{ // try, catch를 쓴 이유는 indexno가 6개의 저장 공간을 넘는 값을 가질 경우 에러 발생 시키지 않기 위해서이고, 조건 및 반복문을 빠져나가기 위함.

    while(conf){ // true일 경우 무한 반복함

     for(int i=0; i<clnumber.length; i++){

      if(clnumber[indexno]==0){

        zero[indexno]=true;

        System.out.println("인덱스번호["+indexno+"]에서" + clnumber[indexno] + "검출"); //'0' 검출에 대한 알림

      }else if(indexno==i){ //존재의 이유는, 인덱스번호와 반복횟수의 번호가 겹칠 경우 아래의 else if 에 대해 무조건 조건이 걸릴 수 밖에 없음. 그러나 이 문구를 아래문구보다 위에 올리니 아래 문구에 걸리지 않고 이 문구만 처리함.

      }else if(clnumber[indexno]==clnumber[i]){

      System.out.println("인덱스번호" + indexno+"와"+i+"에서 중복 번호 검출"); //중복번호 검출에 대한 알림

        same[indexno]=true;

      }else{}

     }

    indexno++; // 인데스번호를 증가시켜, 전체 배열 번호를 검사. While문 조건이 true이기 때문에 배열 개수를 넘어서기전까지는 무한 반복.

    }

    }catch(Exception e){ //인덱스번호가 배열 개수를 넘어서면 위 조건 및 반복문은 에러에 걸려 catch 문구가 호출됨

    conf=Arrays.equals(zero, same); //'0'번 검사와 중복번호 검사 결과가 무결하다면 결과 값은 true임. 하나라도 무결하지 않으면 false

    System.out.println("0번 유무검사와 번호 중복 검사 결과는"+conf+"입니다.");

    if(conf!=true){ // 무결하지 않으면 번호 생성 및 검사 다시 실행

      Ngeneration();

      filter(true);

    }

  }

}

void reportNumber(){ //최종 결과에 대한 출력 메서드

  for(int i:clnumber){

    System.out.print(i+",");

  }

}

 

  public static void main(String[] args) {

    LottoGeneration lg = new LottoGeneration();

    lg.Ngeneration();

    lg.filter(true);

    lg.reportNumber(); 

  }

}

오늘 이걸로 로또번호 생성해서 10게임 함 ㅎㅎㅎ.

평소에 그냥 로또사면 뭔가 되게 요행을 바란 것 같은데,

내 노력이 들어가고, 내가 만든 프로그램으로 로또 사니까 크게 요행을 바란 느낌은 안든다 ㅎ.

안드로이드에 Java 코드를 작성 할 수 있는 앱이 있다. Java N-IDE 라고.

틈틈히 시간 날 때 연습해보고 싶은 초보자들에게 강추한다!

저 코드도 오늘 폰 통해서 나옴!

+ Recent posts