본문 바로가기

문과 코린이의, [C#] 기록/C# 활용

[문과 코린이의 IT 기록장] C# 기초 예시 - 반복문2 (While문, DoWhile문) 활용

반응형

[문과 코린이의 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 크기 마음대로 조정 가능

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#기초 예시 / 참고 자료를 더 보고 싶다면?

 

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형