[문과 코린이의 IT 기록장] C# 기초 예시 - 반복문2 (While문, DoWhile문) 활용
[문과 코린이의 IT 기록장] C# 기초 예시 - 반복문2 (While문, DoWhile문) 활용
0. C# _ While , Do While에 관해서
[ 목적 ]
- 조건에 따라 반복을 수행하고 싶을 경우 사용
- While과 Do While의 차이점은, 반복 조건을 확인하는 시점
- Do While의 경우 조건을 확인하기 전 내용을 먼저 수행하기 때문에, 최초 한번은 무조건 수행하게 됨.
cf 1) While(조건) { 반복 시 수행할 내용 } // 조건이 거짓이 될 때까지 수행
cf 2) Do { 반복 시 수행 할 내용 } While(조건); // 조건 비교를 마지막에 하기 때문에 한번은 내용을 무조건 수행하게 됨
1. UI 부분
# label - 속성
BackColor : 배경색
ForeColor : 글씨색
TextAlign : 글씨 정렬
AutoSize (False) : label 크기 마음대로 조정 가능
2-1. 코드 부분
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _20210604___While_doWhile
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnWhileResult_Click(object sender, EventArgs e) // While문(로또 번호) 버튼 클릭
{
// 로또의특징 1~45중 : 6개의번호 추출
int[] iArray = new int[6]; // int형 배열 iArray는, int형 공간 6개를 생성
int iCount = 0; // 지금 현재 몇 번째인지, 배열의 위치를 확인해 주는 변수
StringBuilder sb = new StringBuilder(); // 문자열 보관을 위한 객체
Random rd = new Random(); // 난수를 발생시킴
[ 난수(Random ] : 특정한 순서나 규칙을 가지지 않은 무작위의 숫자를 발생시키는 함수. : 임의의 숫자나 확률이 필요한 알고리즘이나 코드에 사용한다. - Next() : Random rd = new Random();의 생성자를 통해, 난수를 발생시킬 수 있다. : rd.Next()를 이용해, 음수가 아닌 임의의 정수를 반환한다. - Next(n) : rand.Next(n)을 이용해, n보다 작은 음수가 아닌 임의의 정수를 반환한다. (0~n-1값 반환) - Next(n,m) : rand.Next(n,m)을 이용해, n보다 같거나 크며 m보다 작은 음수가 아닌 임의의 정수를 반환한다. (n~m-1값 반환) - NextDouble() : rand.NextDouble()을 이용해, 0.0~1.0의 임의의 부송소수점 난수를 반환한다. - NextBytes(array) : rand.NextBytes(array)를 이용해, byte형식의 배열에 난수를 채운다. |
// iArray의 6개의 공간이 다 찰때까지 진행한다.
while (Array.IndexOf(iArray,0)!= -1) // IndexOf가 0의 값을 찾지 못하면, -1을 반환함
[ System.Array ] - Array클래스는 배열에 대한 다양한 기능을 제공한다. 1) 속성 - Rank : 배열 차원의 수를 가져온다. - Length : 배열의 길이를 가져온다. 2) 메소드 - Clear : 배열 형식에 따라, 정수 형식일 경우 0, 논리 형식일 경우 false, 참조 형식일 경우 null로 초기화한다. - ForEach : 지정한 배열의 각 요소에서 지정한 동작을 수행한다. - Resize : 배열의 요소 수를 지정된 새로운 크기로 변경한다. - indexOf : 지정한 개체를 검색하여 1차원 Array 전체에서, 처음 검색된 개체의 인덱스를 반환한다. |
{
int iNumber = rd.Next(1,46); // 1 <= x < 46 값을 반환해서, 변수 iNumber에 넣음
if (Array.IndexOf(iArray, iNumber) == -1) // indexOf가 iArray 내에서, iNumber의 값을 찾지 못하면 -1을 반환해라.
{ // 만약 찾지 못했다면
iArray[iCount] = iNumber; // iNumber값을, 해당 배열에 집어넣고
sb.Append(string.Format("{0}, ",iNumber)); // 출력문 sb객체에 저장
iCount++; // iCount를 하나 늘려줌으로써, 다음 배열공간을 채워넣기 시작
}
}
lblWhileResult.Text = sb.ToString(); // lblWhileResult 라벨의 Text부분에, sb객체의 값을 출력해라.
lboxWhileResult.Items.Add(sb.ToString()); // lboxWhileResult 리스트박스에, sb객체의 값을 출력해라
* (리스트박스 이름).Items.Add : 리스트박스에 값 넣는 방법
}
private void btnDowhileResult_Click(object sender, EventArgs e) // DoWhile문(선택 번호) 버튼 클릭
{
Random rd = new Random(); // 난수를 발생시킴
int iNumber = int.Parse(tboxNumber.Text);
// 변수 iNumber에, tboxNumber텍스트박스에 입력된 Text값을 int형으로 변환시켜 넣는다.
if (iNumber<1 || iNumber>100)
{
MessageBox.Show("1~100 사이의숫자를지정해주세요); // 팝업 띄우기
return; // 반환시키고 끝나버림
}
int iCheckNumber = 0; // 무작위로 뽑힌 숫자 저장 변수
int iCount = 0; // 뽑은 횟수 증가 변수
do
{
iCheckNumber = rd.Next(1, 101); // 1<=x<101의 숫자 중 무작위로 뽑아서, iCheckNumbere에 넣기
iCount++;
} while (iNumber != iCheckNumber);
// 내가 입력한 iNumber와, iCheckNumber가 다르면 다시 실행. 같으면 다음 코드로 넘어감
lblDowhileResult.Text = string.Format("-뽑은숫자 {0}을 {1}회만에 찾았습니다", iNumber, iCount);
// lblDownWhileResult 라벨의 TExt부분에, 우측 문장을 출력하기.
}
}
}
2-2. 로또 번호 추출을 오름차순으로 정렬하고 싶다면?
private void btnWhileResult_Click(object sender, EventArgs e) // While문(로또 번호) 버튼 클릭
{
int[] iArray = new int[6];
int iCount = 0;
StringBuilder sb = new StringBuilder();
Random rd = new Random();
while (Array.IndexOf(iArray,0)!= -1)
{
int iNumber = rd.Next(1,46);
if (Array.IndexOf(iArray, iNumber) == -1)
{
iArray[iCount] = iNumber;
// sb.Append(string.Format("{0}, ",iNumber));
iCount++;
}
}
Array.Sort(iArray); // 오름차순 정렬
foreach (var iNumber in iArray)
{
sb.Append(string.Format("{0}, ", iNumber));
}
lblWhileResult.Text = sb.ToString();
lboxWhileResult.Items.Add(sb.ToString());
}
3. 결과물 부분
4. C#기초 예시 / 참고 자료를 더 보고 싶다면?
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |