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. ★코드를 다 짰다면 다양한 입력값으로 테스트하기!!! ★
- 최소값/최대값
- 경계값
- 유효 범위 밖의 값
'아무거나' 카테고리의 다른 글
| 장식자 패턴(Decorator Pattern) 메모리 참조와 작동 방식 (0) | 2023.10.08 |
|---|---|
| QT Creater 언어 바꾸는법 (0) | 2023.09.19 |
| 게임 서버 개발자(게임 서버 프로그래머) 로드맵 (0) | 2021.12.22 |