2017-03-21 8 views
0

왜 내가 IndexOutOfBounds 예외가 계속 발생하는지 이해할 수 없습니다. 사용자는 10 자리 숫자 또는 센티넬 값인 -99를 입력 할 수 있습니다. 10 번째 숫자에 오류가 발생합니다. number.Length를 number.Length -1로 편집하면 오류가 발생하지 않지만 9 개의 숫자 만 허용합니다. 어떤 생각? 배열의 길이를 먼저 확인되도록C# 사용자 입력에서 배열 채우기 while 루프, w/센티널 - IndexOutOfBounds 오류

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using static System.Console; 

namespace SomeProggy 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] numbers = new int[10]; 
      int x = 0; 
      string entryString = ""; 
      int counter= -1; 



      while (numbers[x] != 10 && counter < numbers.Length && entryString != "-99") 
      {        
       Write("Enter up to 10 numbers > "); 
       entryString = ReadLine(); 
       numbers[x] = Convert.ToInt32(entryString); 
       x++; 
       counter++; 
      } 


     } 
    } 
} 

답변

1
는 루프 조건을 변경

: numbers[x]에 액세스하는 동안

while (counter < numbers.Length && numbers[x] != 10 && entryString != "-99") 
{ 
    // ... 
} 

그렇지 않으면 10- x 증가는 경계 밖으로 갈 때. 이 문제는 counter < numbers.Length 수표 이전에 발생합니다.

+0

정말 고마워요. 그것은 트릭을했다. – codeRed