for문 (반복문)
- while처럼 조건식이 참인 동안 코드를 반복 실행한다.
- 하지만 while보다 반복을 더 정교하게 제어할 수 있다.
- while에 비하여 좀 더 많은 코드로 이루어져 있지만 임의의 횟수만큼 반복을 수행하기에는 for문이 더 편리하다.
for문 형식)
for (초기화식; 조건식; 반복식) {반복 실행할 코드}
초기화식: 반복을 실행하기 전, 가장 먼저 딱 한번만 실행된다.
ㄴ for 반복문에서 사용할 변수 등을 이곳에서 초기화 한다.
조건식: 반복을 계속 수행할지 여부를 결정하는 식
ㄴ 이 조건의 결과가 false가 되면 반복을 중단한다.
반복식: 매 반복이 끝날 때마다 실행된다.
ㄴ 주로 여기서 조건식에서 사용하는 변수의 값을 조정한다.
반복식이 실행된 후에는 조건식이 실행되어 반복을 계속 진행할지 여부를 판단한다. (i++, i--)
예시 코드
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
코드 내부의 실행 순서
1. int형 변수 i를 선언하고 0으로 초기화한다.
2. 바로 조건식을 실행해 i가 5보다 작은지 확인한다.
3. 0 < 5가 true임으로 WriteLine 실행한다.
4. 반복식의 i++을 실행해 i가 1이 된다.
5. 조건식을 실행해 i가 5보다 작은지 확인한다. ,,, 반복
즉 초기값은 0으로 하고 i가 false가 될 때까지 i를 1씩 증가시키면서 출력하는 코드이다.
예제 1. 홀수만 출력하는 코드를 작성하라
for (int i = 1; i <=10; i += 2)
{
Console.WriteLine(i);
}
i가 1부터 10까지를 출력하지만, 반복문이 +=2 이므로 실행마다 2씩 늘어나 1, 3, 5, 7, 9 홀수가 나오게 된다.
예제 2. 1부터 100까지의 합을 구하는 코드를 작성하라
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum += i;
}
Console.WriteLine(sum);
for문을 돌면서 i는 1부터 100까지 1씩 증가하고, sum에 이 값을 모두 더한 뒤 for문을 빠져나와 출력문을 실행한다.
출력되는 값은 5050
중첩 for문
- for문은 if문처럼 2개정도까지는 자주 중첩해서 사용한다.
- 중첩으로 반복을 해야한다면 while보다 for문이 적절하다.
예시. 아래의 값을 실행하면 0 0 0 1 0 2 1 0 식으로 2 2 까지 출력된다
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.WriteLine("i의 값: {0} k의 값: {1}", i, j);
}
}
예제 3. 구구단 코드를 작성하라
for (int i = 2; i <= 9; i++)
{
for (int k = 1; k <=9; k++)
{
Console.WriteLine("{0} * {1} = {2}", i, k, i * k);
}
}
break는 본인이 속한 가장 가까운 반복문에서 빠져나온다고 배웠었다.
이와 대조되는 continue의 개념을 살펴보자.
continue
- 한 번 건너뛰어 반복을 계속 수행한다.
- 주로 예외 처리에서 많이 쓰인다.
break문은 반복문을 탈출해 나가버리지만, continue는 아래의 내용을 수행하지 않고 반복문을 이어 한다.
예시를 보자
for (int i = 0; i < 10; i++)
{
if (i == 3)
{
continue;
}
Console.WriteLine(i);
}
위의 내용을 실행하면 0부터 9까지중에 3을 제외한 나머지 숫자만 출력된다.
이는 if (i != 3)일때 출력 으로 코드를 짤 수 있지만, 대체적으로 continue를 사용한 for문이 훨씬 보기 좋기 때문에 많이 이용한다고 한다.
예제 4 위의 홀수 코드를 continue를 이용한 코드로 작성하라
for (int i = 0; i < 10; i++)
{
if (i%2 == 0)
{
continue;
}
Console.WriteLine(i);
}
짝수일 경우 건너뛴다의 continue를 넣어주면 간단하게 할 수 있다.
예제 5. 홀수를 역순으로 출력하되, 그 홀수중의 짝수번째 숫자만 출력하라.
for (int i = 10, count = 0; i > 0; i--) //홀수의 개수를 세는 count 변수 선언
{
if (i % 2 == 0) //짝수이면 건너뜀
{
continue;
}
count++; //홀수이면 홀수의 개수 셈
if (count % 2 == 1) //홀수가 홀수개일때 건너뜀
{
continue;
}
Console.WriteLine(i);
}
위의 코드를 변형해 역순으로 출력되게 만든 뒤, 홀수의 개수를 세는 변수를 선언해 이 변수가 홀수일때 건너뛰게 코드를 작성해 보았다. 꼼수로 그냥 역수중에 4번째마다 출력되게 해도 될 듯 하다.
열거형 상수 enum
- 상수는 변수와 다르게 안의 데이터 값을 변경하지 못한다. (*변경하려고 할 시 error)
- 그리고 변수를 상수화 시킬 때 사용하는 것이 열거형 상수 enum이다.
- 또한 할당이 필요하다면 선언과 동시에 할당해야 한다.
- start void Main 위의 줄에 사용하며 형식은 다음과 같다.
enum (이름 대문자로) {상수 이름 대문자로, 이름, 이름};
타입을 바꾸고 싶다면 (int)Direction.Left; 처럼 쓸 수 있으며
열거형 상수 내에 접근하려 할 때는 .을 써야한다.
그리고 switch case문에 사용할 경우 보통 (열거형 상수)변수 로 열거형상수 type으로 변수의 type을 바꿔 이용한다.
예시 코드
enum DIRECTION { LEFT, RIGHT = 10, UP, DOWN};
enum PLAYERSTATE { ATTACK, MOVE, DEFENSE}; //열거형 상수
enum GAME { ROCK=1, SCISSORS=2, PAPER=3};
Console.WriteLine(DIRECTION.LEFT);
Console.WriteLine(DIRECTION.RIGHT);
Console.WriteLine(DIRECTION.UP);
Console.WriteLine(DIRECTION.DOWN);
Console.WriteLine((int)DIRECTION.LEFT);
Console.WriteLine((int)DIRECTION.RIGHT); //10
Console.WriteLine((int)DIRECTION.UP); //11
Console.WriteLine((int)DIRECTION.DOWN);
PLAYERSTATE state = PLAYERSTATE.ATTACK;
//플레이어 스테이트 형의 변수 state
Console.WriteLine(state == PLAYERSTATE.ATTACK); //true
Console.WriteLine(state == PLAYERSTATE.DEFENSE);//false
Console.WriteLine(state == PLAYERSTATE.MOVE); //false
int playerNum;
int count = 0;
while (true)
{
Console.WriteLine("입력해라");
Random random = new Random();
playerNum = int.Parse(Console.ReadLine());
int comNum = random.Next(1, 4);
switch ((GAME)playerNum)
{
case GAME.ROCK:
switch ((GAME)comNum)
{
case GAME.ROCK:
Console.WriteLine("ddd");
break;
}
break;
}
}
}
'공부 > C#' 카테고리의 다른 글
[C#] 이차원 배열과 구조체, static과 트럼프 카드 출력 코드 (0) | 2023.03.20 |
---|---|
[C#] 배열, foreach, 셔플 코드와 이를 이용한 예제 및 로또 생성기 (0) | 2023.03.17 |
[C#] 콘솔창 글씨/배경 색 바꾸기, 실제 색상표, 출력 글자 수 빈칸으로 맞추기와 이것들을 활용한 콘솔 게임 예제 (0) | 2023.03.16 |
[C#] switch - case - default문, 난수 random, 반복문 while문 예제; (0) | 2023.03.15 |
[C#] C# 프로그래밍에서의 연산자 우선순위 (0) | 2023.03.14 |