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 라고.
틈틈히 시간 날 때 연습해보고 싶은 초보자들에게 강추한다!
저 코드도 오늘 폰 통해서 나옴!
'개발노트 > Java' 카테고리의 다른 글
String 메서드 중 substring, trim, equals, contains, indexOf 테스트 예제 (0) | 2023.02.14 |
---|