[Java] 로또 번호 생성 - 작성

Study/Java 2019. 6. 6. 14:30 Posted by meanoflife
반응형

심심풀이라 작성한 로또 번호 생성 프로그램입니다.

아무 기능없이 그냥 번호만 생성해 줍니다. - 무쓸모!

 

가끔 지인들과 로또를 하곤합니다.

재작년에 같이 프로젝트를 했던 지인 2명과 동일 번호로 매주 로또를 샀던 기억이 나네요.

매번 번호 만들기가 힘들어서 지인 한명이 프로그램을 짰는데, 5만원에 당첨된 적이 있습니다.

 

특별한 기능은 없으며, 2중 FOR문과 중복제거 체크를 한 기본문법으로 작성되었습니다.

	public static void main(String[] args) {
		
		int iRow = 5;
		String[] saAdd = { "", "", "", "", "", "" };  // 추가 번호
		String[] saSub = { "", "", "", "", "", "" };  // 제외 번호
		
		ArrayList<String> arrSub = new ArrayList<String>();
		
		// 제외할 번호를 ArrayList<String>형태로 변경한다.
		// 입력의 편의성을 위해 String[]로 번호를 받았으나, contains를 이용한 편한 체크를 위한 형변환.
		for( int i = 0; i < saSub.length; i++ ) {
			if( !saSub[i].isEmpty() && Integer.parseInt( saSub[i] ) > 0 && Integer.parseInt( saSub[i] ) < 45 ) {
				arrSub.add( Padding.setLPad( saSub[i] + "", 2, " " ) );
			}
		}
		
		Random rn = new Random();
		
		for( int i = 0; i < iRow; i++ ) {
			
			ArrayList<String> arrData = new ArrayList<String>();
			
			// 추가할 번호를 먼저 생성번호에 포함한다.
			for( int m = 0; m < saAdd.length; m++ ) {
				if( !saAdd[m].isEmpty()  && Integer.parseInt( saAdd[i] ) > 0 && Integer.parseInt( saAdd[i] ) < 45  ) {
					arrData.add( Padding.setLPad( saAdd[m] + "", 2, " " ) );
				}
			}
			
			// 6자리의 번호가 생성될 때까지 반복한다.
			while( arrData.size() < 6 ) {
				
				int iNum = rn.nextInt( 45 ) + 1;
				String strData = Padding.setLPad( iNum + "", 2, " " );
				
				// 제외 번호이거나 기등록된 번호이면 SKIP.
				if( arrData.contains( strData ) || arrSub.contains( strData) ) {
					continue;
				}
				
				arrData.add( strData );
			}
			
			Collections.sort( arrData );    // 번호순으로 정렬
			System.out.println( arrData );  // 결과 출력
		}
		
	}

System.out을 이용해 콘솔에 결과를 출력하였습니다.

출력시, 보여지는 모양을 이쁘게(?) 하기 위해 LPad를 이용하여 자릿수를 맞췄습니다.

LPad함수는 이전글에 작성한 클래스를 이용하였습니다.

	public static String setLPad( String strContext, int iLen, String strChar ) {
		
		String strResult = "";
		
		StringBuilder sbAddChar = new StringBuilder();
		for( int i = strContext.length(); i < iLen; i++ ) {  // iLen길이 만큼 strChar문자로 채운다.
			
			sbAddChar.append( strChar ); 
		}
		
		strResult = sbAddChar + strContext;  // LPAD이므로, 채울문자열 + 원래문자열로 Concate한다.
		
		return strResult;
	}

출력 결과입니다.

	[ 1,  9, 25, 29, 35, 37]
	[ 1,  3,  9, 16, 19, 34]
	[21, 24, 31, 35, 39, 40]
	[ 4,  9, 15, 22, 33, 40]
	[ 8,  9, 16, 27, 31, 34]

로또! 됐으면... 좋겠습니다. OTL.

 

※ 추가 설명

    - Random객체를 이용하여 랜덤하게 숫자가 생성되도록 하였습니다.

    - 형변환 Integer.parseInt()를 이용하여 문자형을 숫자형으로 변경하여 1~45 이내의 값인지 Validation하였습니다.

    - saAdd와 saSub변수를 이용하여 무조건 포함할 숫자와 제외할 숫자를 지정할 수 있도록 하였습니다.

 

끝.

반응형