코드짤 때 실수하는 부분들!!!

1. for문의 탐색 인덱스(i)를 for문 내부에서 사용하는 경우(1)

상황

for (int i = 0; i < walls.Count() - 1; i++) // 아래 코드에서 walls[i+1]에 접근하기 위해 i<walls.Count - 1을 해줌.
{
    ...
            
    if (x1 == x2) // 가로 벽
    {
        while ((i < walls.Count() - 1) && (y1 == walls[i + 1].Item1.Item2) && ((walls[i + 1].Item1.Item1 - walls[i].Item1.Item1) == 1))
            i++;
        wallEndPoints.Add(((x1 * 2 - 1, y1 * 2 + 1), (walls[i].Item1.Item1 * 2 + 1, walls[i].Item1.Item2 * 2 + 1)));
    }
            
    ...
}

 

문제가 되는 이유

for문 내부에서 walls[i+1]에 접근하기 때문에 for문의 조건을 i<walls.Count() - 1로 함

하지만 만약 walls 배열의 크기가 1인 경우, walls.Count() - 1 = 0이 되어버려 for문을 아예 돌지 않음

i = walls.Count()일 경우의 IndexOutOfBounds는 고려했지만 정작 i = 0인 경우를 고려하지 못했음...

 

해결법

차라리 for(int i=0; i< walls.Count(); i++)로 for문을 돌리게 하고

i+1인덱스에 접근하는 while문에 i >= walls.Count() 조건을 걸어 IndexOutOfBounds를 체크하는 게 좋았을 것 같다

 

 

 

2. for문의 탐색 인덱스(i)를 for문 내부에서 사용하는 경우(2)

상황

for (int i = 0; i < BeforeFinalPath.Count(); i++)
{
    for (int j = BeforeFinalPath.Count() - 1; j > i; j--) // 뒤에서부터 탐색
    {
        ...
    
        if (!isIntersecting)
        {
            FinalPath.Add(BeforeFinalPath[j]);
            i = j;
            // i--; // for문에서 i++로 인해 다음 i가 증가되므로 -1
            break; // 다음 i로 넘어감
        }
    }
}

 

문제가 되는 이유

내가 원하는 흐름은 i = j;로 값 설정을 하고 다음 for문에서는 i = j인 경우로 for문이 진행되길 원했음

하지만 for문의 i++로 인해 i = j+1 값으로 for문을 돌게 됨

 

해결법

i에 1이 더해질 것을 대비해 위에서 // 주석한 줄처럼 i--;를 해줌

 

 

 

3. 변수 타입을 결정할 때, 해당 타입보다 더 큰값이나 작은 값을 가질 수 있는지 체크하기

오버플로우, 언더플로우를 피하기 위해

 

 

 

4. 덧셈, 곱셈 연산이 있을 경우, 오버플로우 체크하기

 

 

 

5. 숫자를 입력받을 때, 맨 앞에 0이 오는 경우가 있고, 0도 같이 저장해야된다면 string으로 저장

 

 

 

6. 코드를 다 짰다면 다양한 입력값으로 테스트하기!!! ★

- 최소값/최대값

- 경계값

- 유효 범위 밖의 값