오늘 학습 키워드
페어 코딩
오늘 학습 한 내용을 나만의 언어로 정리하기
String에 Contains가 있다.
같은 조 분께서
bool hasChr = false;
for (int i = 0; i < secretWord.Length; i++)
{
if (secretWord[i] == guessChr)
{
hasChr = true; // 가지고 있음
guessWord[i] = guessChr;
}
}
이 부분을 String.Contains 를 활용해서 진행하심.
if(secretWord.Contains(guessChr)){
...
}
이런식으로
야구게임 만들기
예외처리하는데 시간 많이쓴듯
namespace yagoogame
{
internal class Program
{
const int yagooNumbers = 3; // 야구게임에서 사용되는 숫자의 개수
static void Main(string[] args)
{
Random random = new Random();
int[] targetNumber = new int[yagooNumbers];
int[] userGuess = new int[yagooNumbers];
int strikes = 0;
int balls = 0;
bool guessedCorrectly = false;
int attempts = 0;
for(int i = 0; i < yagooNumbers; i++)
{
int randomNumber = random.Next(1, 10);
int idx = Array.IndexOf(targetNumber, randomNumber);
if(idx != -1)
{
i--;
continue;
}
else
{
targetNumber[i] = randomNumber;
}
}
while(!guessedCorrectly)
{
// 초기화
userGuess = new int[yagooNumbers];
strikes = 0;
balls = 0;
// 입력 처리
Console.Write("Enter your guess (3 digits): ");
string? s = Console.ReadLine();
if(String.IsNullOrEmpty(s)) { continue; }
else if(s.Length > yagooNumbers) { continue; }
bool isNotNumber = false;
bool isDuplicated = false;
for (int i = 0; i < yagooNumbers; i++)
{
// 숫자 확인
if (!Char.IsNumber(s[i]))
{
isNotNumber = true;
break;
}
// 중복 확인
if (s.IndexOf(s[i]) != s.LastIndexOf(s[i]))
{
// Console.WriteLine("Duplicated");
isDuplicated = true;
break;
}
}
if (isNotNumber || isDuplicated) { continue; }
// 입력에 문제가 없으면 시도 횟수 증가
attempts++;
// String을 int[3] 배열로
for (int i = 0; i < yagooNumbers; i++)
{
userGuess[i] = s[i] - '0';
}
// ball, strike 검사
for (int i = 0; i < yagooNumbers; i++)
{
int idx = Array.IndexOf(targetNumber, userGuess[i]);
if(idx == -1) { continue; } // targetNumber에서 찾을 수 없음 = 없는 숫자
else if(idx == i){ strikes++; } // targetNumber에서 찾았는데 그게 i랑 같음 = 스트라이크
else { balls++; } // targetNumber에서 찾았는데 i는 아님 = 볼
}
if (strikes == yagooNumbers) {guessedCorrectly = true;}
Console.WriteLine($"{strikes} Strike(s), {balls} Ball(s)");
if (guessedCorrectly) break;
}
Console.WriteLine($"Congratulations! You've guessed the number in {attempts} attempts.");
}
}
}
이번에 IndexOf, LastIndexOf를 많이 쓴듯
특히 중복처리 할때 IndexOf로 나온 첫 번째 위치와 LastIndexOf로 나온 마지막 위치가 다르면 중복으로 판단하는건 잘 생각한 것 같음
학습하며 겪었던 문제점 & 에러
- 문제&에러에 대한 정의
야구게임 답이 345 (예시) 일때, 333으로 하면 1 스트라이크 2 볼로 나옴.
- 내가 한 시도 / 해결방법
입력에 대한 중복 처리도 진행함
- 이 문제&에러를 다시 만나게 되었다면?
주어진 조건과 사용자 입력을 잘 파악해야겠다. 여기서는 주어진 조건이 애초에 컴퓨터가 >중복없는< 3자리 숫자를 뽑는거였는데 사용자 입력으로는 중복을 막지 않아서 이런 일이 생김.
내일 학습 할 것은 무엇인지
게임 내 상호작용 분석