네, 말씀주신 내용이 맞습니다.
사용자로부터는 1, 2, 3을 입력 받았지만,
출력용 문자열 배열은 0, 1, 2 번째 문자열이 들어 있습니다.
그래서, 가위, 바위, 보 문자열을 정확히 출력하려면,
choice 배열의 인덱스를 맞추어야 합니다.
iRandon과 iSelection 변수에는 1, 2, 3 만을 저장하여 사용하지만,
choice는 0, 1, 2 순서의 인덱스를 사용해야 합니다.
우리가 흔히 사고하는 방식은 1, 2, 3이지만,
배열에 저장되는 데이터는 0, 1, 2 형태의 인덱스의 차이로 보면 좋습니다.
물론, 사용자가 1, 2, 3 이외의 값을 입력하면 현재 프로그램은 에러가 나게 되어 있습니다.
감사합니다.
using System;
class RockPaperScissors
{
static void Main()
{
int iRandom = 0; // 1(가위), 2(바위), 3(보)
int iSelection = 0; // 사용자 입력(1~3)
//[!] 0번째 인덱스 "가위", 1번째 인덱스 "바위", 2번째 인덱스 "보"
string[] choice = { "가위", "바위", "보" };
// 컴퓨터의 랜덤값 지정
iRandom = (new Random()).Next(1, 4);
Console.Write("1(가위), 2(바위), 3(보) 입력 : _\b");
iSelection = Convert.ToInt32(Console.ReadLine());
//[!] 사용자로부터 입력받은 값에서 1을 빼야 배열의 인덱스에 위치하는 문자열과 일치
Console.WriteLine("\n 사용자: {0}", choice[iSelection - 1]);
Console.WriteLine(" 컴퓨터: {0}\n", choice[iRandom - 1]);
// 결과 출력
if (iSelection == iRandom)
{
Console.WriteLine("비김");
}
else
{
switch (iSelection)
{
case 1: Console.WriteLine((iRandom == 3) ? "승" : "패"); break;
case 2: Console.WriteLine((iRandom == 1) ? "승" : "패"); break;
case 3: Console.WriteLine((iRandom == 2) ? "승" : "패"); break;
}
}
}
}
On 2021-10-28 오후 3:14:00, '최승희' wrote:
int iRandom = 0;
int iSelction = 0;
string [] choice = {"가위", "바위", "보"};
iRandom = (new Random()).Next(1, 4);
Console.Write("1(가위),2(바위),3(보) 입력 : _\b");
iSelction = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n사용자 : {0}", choice[iSelction -1]);
Console.WriteLine("컴퓨터 : {0}\n", choice[iRandom -1]);
여기서 choce[iSelction -1]을 한이유가
choice 배열에 인트형으로 변환해서 넣었는데 그냥 -1안하고 1,2,3으로하면
배열인덱스는 0,1,2 식하는데 그럼 안맞아서 오류가 나는게 맞는건가요?
그래서 iRamdom 변수 지정값도 1,4를줘서 뺴준거 맞나요??