본문 바로가기
C# 윈도우 프로그래밍

C#) 랜덤 숫자, 랜덤 문자를 멋지게 뽑는법

by ♥︎♦︎★ 2022. 6. 10.

1. 간단한 랜덤 함수


현재 본인이 개발중에 있는 동체시력 측정 프로그램에서는 사용자의 선택에 따라서 

숫자, 알파벳, 특수문자가 랜덤하게 추출되어 랜덤한 위치값에 깜박이며 나오는 뭐 그런 알고리즘이 필요하다. 

그런데 랜덤 숫자는 익히 많이 뽑아봤기 때문에 

Random 클래스의 Next 함수를 이용해서 내가 원하는 범위를 지정해서 뽑는 것쯤이야 너무 쉽게 알고 있다. 

 

Random random = new Random();

int randVal = random.Next(20);

 

뭐 이렇게 두 문장 정도면 쉽게 0~20 사이의 정수를 뽑을수 있고, 

int randVal = random.Next(15) + 5;

 

이런식으로 하면 5~20 사이의 데이터가 뽑히겠지. 

 

2. 고민스러운 상황 


그런데 내가 원하는건 임의의 특수문자들, 예를 들면, 

 

☆★○●◎◆◇■□△♤♠▲♥♡

 

이런 것들중 하나를 뽑아야 하고 a~z, A~Z 데이터중 하나를 뽑아야 한다. 

알파벳은 뭐 사실 정수를 랜덤으로 뽑고 아스키 코드를 이용하는 방법이 있고, 

특수문자도 배열에 담아두고 해당 배열에서 랜덤 정수를 인덱스로 활용해서 뽑는 방법이 있겠지만 

좀더 나이스한 방법을 구글링을 통해 찾았다. 

 

3. 랜덤수를 뽑아내는 나이스한 방법


나는 멤버변수로 아래처럼 숫자, 알파벳, 특수문자를 스트링으로 만들고 스트링을 배열로 할당했다.  

 

private char[] mChars_Numbers = "1234567890".ToCharArray();
private char[] mChars_Chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
private char[] mChars_Specials = "☆★○●◎◆◇■□△♤♠▲♥♡".ToCharArray();

 

 

그리고 랜덤을 뽑을때, ( 숫자 )

Random random = new Random(); 

string rand_str = mChars_Numbers[random.Next(mChars_Numbers.Length)].ToString();

 

구문이 이해가 가는가? 

 

mChars_Numbers에는 1~0까지의 각 숫자들이 char로 담겨져 있고 

해당 배열의 길이를 Max로 하는 integer 값을 하나 뽑아서 그 값을 mChars_Numbers 배열의 인덱스로 활용한 것이다. 

 

그리고 그것을 string으로 받아서 rand_str에 할당.

간단하지만 멋진 방법이다. 

'C# 윈도우 프로그래밍' 카테고리의 다른 글

C#) String 출력 시 format  (0) 2022.06.12
C#) double 형 데이터를 사용하는 루프  (0) 2022.06.10

댓글