[ 목차 ]
오늘은 반복문!!
뉴비에겐 조건문과 반복문부터 이제 머리가 점점 띵하기 시작한다..
알 것 같으면서도 모르겠고,
문제 보고 하려면 손이 멈춰버린다..
하지만 아직 기초 단계이다 . . ..
컴퓨터랑 대화하기 정말 어렵다😢
1. for 문
반복문이란? 무엇일까
조건에 벗어날때까지 반복! 한다.
라는 의미이다.
여기에서 '조건'이 붙는다는 것은 조건식과도 연관이 많다는 것이다.
그러니 알아야겠지? 조건문?
조건문을 잘 이해해야 반복문도 이해가 쉽게 다가온다.
(조건문부터 막혔던 사람 나야 나..)
for문은
for (초기화 / 조건문 / 증감식) 이렇게 쓴다.
막상 이렇게 보니 못알아보겠죠?
코드로 보면
for (int i = 1; i <= 5; i++){}
for (변수 변수명 = 1; 변수명 <= 5; 변수명++) {}
초기화; 조건문; 증감식;
이제 정수형 변수가 1일 때, (초기화)
변수는 5보다 작거나 같을 때이니까 조건 충족해 출력! (조건문)
조건에 만족하는 출력 후에 정수형 변수가 1씩 더해짐 (증감식)
그렇게 조건문에 부합하지 않을 때까지 이 과정을 반복하는 것이다.
//반복문
//초기화 / 조건문 / 증감식
for (int i = 1; i <= 5; i++) //여긴 선위 후위 없음, 정수형 변수를 for 안에서 정의하고, i가 5보다 작거나 같을 때 끝, i 1씩 증가한다
{
Console.WriteLine("숫자: " + i);
}
추가적으로 알아야 할 것은 증감식에서 선위 후위를 배웠던 기억이 있다.
for 문에서는 선위 후위의 개념이 없다. 상관 없다는 것이다.
이러한 for문을 이용해서 다양한 실습을 할 수 있다.
첫 번째로 무한반복을 만들 수 있다.
초기화 조건문 증감식 작업이 모두 뺀 for 문으로
별도의 종료 조건이 없어 무한 반복이 되는 것이다.
//응용 : 무한 반복
for (; ; )
{
Console.WriteLine("중요한 건 꺾이지 않는 마음");
}
두 번째로 0부터 9까지 출력하기이다.
조건을 10보다 작게 하고 초기화와 증감식을 작성하면 0부터 9까지 출력이 가능하다.
//0부터 9까지 출력하기
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
세 번째로 1부터 10까지의 합을 구하기이다.
우선 더할 값을 출력할 변수를 선언한 뒤에
for문을 통해 1부터이니
int i = 1; → 초기화
10까지이니
i <= 10; → 조건식
그리고 i ++ 증감식을 넣는다.
반복문 안에는
sum += i (sum = sum + 1)
연산자를 넣어 완성하고 출력 메서드를 작성하면 된다.
그렇게 된 최종 코드이다.
//1부터 10까지의 합 구하기
int sum = 0;
for (int i = 1; i <= 10; i++)
{
sum += i; // sum = sum + 1;
//중간 값이 궁금할때
Console.WriteLine($"sum: {sum}, i: {i}");
}
Console.WriteLine("1부터 10까지의 합: " + sum);
2. while 문
반복문 중에 하나인 while문.
for문과 무엇이 다르냐?
for문은 괄호 안에 (초기화/조건문/증감식)을 넣지만
while은 따로다.
변수에서 초기화를 하고
while 문 괄호에 조건식만 넣는다.
while 문 안에 증감식을 넣는 형식이다.
추가적으로 반복문 안에 조건문을 넣어 다른 조건을 수행할 수도 있다.
int count = 1; //초기화
while (count <= 5) //조건식
{
Console.WriteLine("Count: " + count);
count++; //증가, 감소
if (count == 3) //중간에 3일때 종료하고 싶음
{
Console.WriteLine("3일때 반복문 탈출");
break;
}
}
Console.WriteLine("Count: " + count);
하지만 while 문 괄호에 조건식을 안 넣고
중괄호 안에 조건문을 넣는 경우도 있다.
while 문을 실행하고 if 조건문을 넣어 조건식을 정리하는 방법도 있다.
int counts = 0;
while (true)
{
if (counts == 5) break;
counts++;
Console.WriteLine(counts);
}
정답은 없으니 취향껏 쓰면 된다. 본인이 더 편한 쪽으로!
3. do while 문
while 문은 알겠는데, do?는 왜 붙는 걸까?
라는 궁금증이 있었다.
do 는 '하다'의 의미를 지니고 있는 만큼
실행 한 번 하고!
while문과 똑같은 진행을 한다.
최소 한 번은 사용하기 위한 do
다음에 while 문 작성이다.
여기에서의 포인트는 while () 괄호 후에 세미콜론이 없었지만
do while 문은 넣어야한다.
int x = 5;
do
{
Console.WriteLine("최소 한 번은 실행됩니다.");
x--;
} while (x > 0); //조건이 여기에 붙음, 세미콜론까지 넣어야함 여긴
하지만 불편해서 많이 사용하지 않는다는 것이다.. 알아만 두면 좋을듯!
4. 랜덤
랜덤이란? 말 그대로 랜덤이다.
다양한 숫자들을 랜덤하게 출력하는 형식이다.
랜덤은 어떻게 생성하는 것인가? 하면
아래 코드로 랜덤 객체를 생성한다.
Random rand = new Random(); //랜덤 객체를 생성한다.
이 랜덤과 반복문을 이용해 어떻게 쓰이는지 알아보자...
첫 번째로 0이상 10 미만의 랜덤 정수 생성이다.
for 문 안에
int randomNumber = rand.Next (0, 10);
변수 변수명 Random의 Next 메서드 0부터 9까지
여기에서 하나의 의문점이 생겼다.
왜 0부터 10까지가 아니라 0부터 9까지인 것인가?
10까지 출력하는 것이 아니라 10 전까지만 출력이 되기 때문이다.
정수형이 아니라 실수형으로 출력하고 싶으면
rand.Next 가 아닌
rand.NextDouble 메서드로 변경하면 된다.
for (int i = 0; i < 10; i++) //이 행동을 10번 반복한다의 반복문
{
int randomNumber = rand.Next(0, 10); //0, 10 이렇게 하면 0 ~ 9만 나옴, 전까지만 출력
Console.WriteLine("0이상 10미만의 랜덤 정수: " + randomNumber);
}
for (int i = 0; i < 10; i++) //float 실수형으로 뽑기
{
double randomNumber = rand.NextDouble(); //0, 10 이렇게 하면 0 ~ 9만 나옴, 전까지만 출력
Console.WriteLine("랜덤 실수: " + randomNumber);
}
아래의 코드는 이와 비슷한 5부터 14까지의 랜덤 출력이다.
int randomInRange = 0;
for (int i = 0; i < 100; i++)
{
randomInRange = rand.Next(5, 15); // 5부터 14까지
Console.WriteLine("5부터 14까지: " + randomInRange);
}
랜덤이 정말 유용한 이유가 많은 게임에서 쓰이는 확률을 랜덤으로 구현할 수 있다.
확률은 1%에서 100%이기 때문에 랜덤값을 (1, 101)로 잡는다.
for 문 안에 조건문을 가져 확률 조건을 나눈다.
//대장장이 키우기
//도끼등급 SSS 10%
//도끼등급 SS 40%
//도끼등급 S 50%
Random rand = new Random();
int rnd = 0; //초기값
for (int i = 0; i < 20; i++)
{
rnd = rand.Next(1, 101); //1 ~ 100
if (rnd >= 1 && rnd <= 10) // 1 ~ 10 => 10%
{
Console.WriteLine("도끼등급 SSS");
}
else if (rnd >= 11 && rnd <= 40) // 11 ~ 40 => 40%
{
Console.WriteLine("도끼등급 SS");
}
else
{
Console.WriteLine("도끼등급 S");
}
Thread.Sleep(500); // 0.5초 정도 간격을 두고 뽑아라.
}
여기에서 추가 TIP 코드!
출력할때 바로바로 나오는 것에 딜레이를 주기 위한 코드이며,
500은 0.5초 1000은 1초이다.
Thread.Sleep(500)
나름 유용하니 알아두는 게 좋다!
6. 점프문 (break, continue, go to)
(1) break 문
break 단어의 의미대로
반복문을 탈출하고 싶을 때 쓰이는 것이다!
조건에 충족해 출력을 하면 조건문을 빠져나온다.
for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
break;
}
Console.WriteLine(i);
}
(2) continue 문
이것도 단어의 의미대로
현재 반복을 건너뛰고 다음 반복으로 넘어간다.
보통 조건에 만족하면 출력하지만, 건너뛰고 다음에 출력한다.
이러한 점을 활용해
홀수만 출력할 수 있는 코드를 실습하였다.
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
continue; //컨티뉴면 출력하기 전에 for문으로 돌아간다.
//그래서 한 번 넘어가고 출력(if에 적합하지 않아), 넘어가고 출력을 반복한다.
}
Console.WriteLine(i); //홀수만 출력
}
(3) goto 문
2중 반복문을 사용할 때
이 2중 반복을 한 번에 탈출할 때 쓰는 경우이다.
int n = 1;
start:
if(n <= 5)
{
Console.WriteLine(n);
n++;
goto start; //레이블로 이동 -> start:로 => 코드가 많아지면 복잡해져서 잘 안씀
}
하지만 이것도 goto문을 쓰는 것보다 break를 두 번 쓰는 게 좋다.
이제 이번 내용을 전체 통틀어서
간단한 콘솔로 만드는 텍스트 게임을 실습하였다.
선택지를 입력받아 선택한 것에 대한 컨텐츠를 하는 것이다.
대부분 if문 조건문을 많이 사용하였다.
static void Main(string[] args)
{
//실습
Console.WriteLine("대장장이 키우기");
Console.WriteLine(" ");
Console.WriteLine("게임을 시작하시겠습니까? (Y/N)");
ConsoleKeyInfo keyInfo = Console.ReadKey(true);
if (keyInfo.Key == ConsoleKey.Y)
{
Console.WriteLine("\\n게임 시작합니다!");
//게임 시작 로직
Console.ReadLine();
Console.Clear();
Random rand = new Random();
int pmoney = 3000;
int input;
int rnd;
Thread.Sleep(500);
//무한반복
while (true)
{
Console.Clear();
Console.WriteLine("1. 나무캐기 2. 장비뽑기 3. 나가기");
Console.Write("어떤 것을 하시겠습니까? : ");
input = int.Parse(Console.ReadLine());
if (input == 1) //나무캐기 화면
{
while (true)
{
Console.WriteLine("나무캐기 (Enter)");
Console.WriteLine("뒤로가기 (x)");
string str = Console.ReadLine();
pmoney += 100;
Console.WriteLine("소지금: " + pmoney);
if (str == "x")
{
Console.WriteLine("뒤로가기");
break;
}
}
}
else if (input == 2) //장비뽑기
{
if (pmoney >= 1000) //돈이 있는지 확인 후 뽑기
{
pmoney -= 1000;
//20번 뽑기
for (int i = 1; i <= 20; i++)
{
rnd = rand.Next(1, 101);
if (rnd == 1) //1%
{
Console.WriteLine("도끼등급 SSS");
}
else if (rnd >= 2 && rnd <= 6)
{
Console.WriteLine("도끼등급 SS");
}
else if (rnd >= 7 && rnd <= 17)
{
Console.WriteLine("도끼등급 S");
}
else if (rnd >= 18 && rnd <= 38)
{
Console.WriteLine("도끼등급 A");
}
else if (rnd >= 39 && rnd <= 69)
{
Console.WriteLine("도끼등급 B");
}
else
{
Console.WriteLine("도끼등급 C");
}
Thread.Sleep(500); //0.5초 간격으로 뽑혀라
}
}
else
{
Console.WriteLine("돈이 부족합니다. \\n");
Thread.Sleep(2000); //2초
}
}
else if (input == 3)
{
Console.WriteLine("나갑니다.");
Environment.Exit(0);
//break;
}
}
}
else if (keyInfo.Key == ConsoleKey.N)
{
Console.WriteLine("\\n게임 종료합니다.");
//게임 종료 로직
}
else
{
Console.WriteLine("\\n잘못된 입력입니다. Y 또는 N을 입력하세요!");
}
오늘은 자주 사용하는 반복문에 대해서 알아보았다..
개념을 아는 것은 정말 정말!! 중요하지만
마지막 실습처럼 무언가를 만들어보는 실습이
꽤나 기억에 잘 남고 도움이 된다.
문제 풀거나 만들어보거나.. 암튼 많이 하는 것이 체고!
이렇게 블로그 쓰면서도 내가 헷갈렸던 부분이나
몰랐던 의미나 알게 되면서 글을 쓰니
뿌듯하면서도 다시 공부하는
기회가 되니
블로그 추천합니다..^.^
😊😊
반복의 짤과 함께 마무리합니다..
'Development > 멋쟁이사자처럼 게임개발 부트캠프' 카테고리의 다른 글
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 5일차 & 6일차 - 함수 (0) | 2025.03.07 |
---|---|
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 5일차 (1) - 배열 & foreach (0) | 2025.03.06 |
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 4일차 (1) - switch 문 (0) | 2025.03.05 |
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 3일차 (2) - 조건문 (0) | 2025.03.04 |
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 3일차 (1) - 이진수 & 연산자 (4) | 2025.02.27 |