2014-11-03 39 views
-1

我正在創建一個包含三個數組的程序:一個用於人的姓,一個用於得分和一個用於玩家號碼。現在,我已經得到了所有的數組和完成這一切,但是當我嘗試打電話給我ProcessDelete方法我不斷收到繼續獲取IndexOutOfRange

System.IndexOutOfRangeException

任何幫助,將不勝感激

 static Int32[] ProcessDelete(Int32[] playerNumbers, ref Int32 playerCount, String[] playerLastName, Int32[] playerPoints) 
    { 
     Int32[] newArray = new Int32[playerNumbers.Length - 1]; String[] newArray2 = new String[playerLastName.Length - 1]; Int32[] newArray3 = new Int32[playerPoints.Length - 1]; 

     int index = 0; 
     int index2 = 0; 
     int index3 = 0; 
     int j = 0; 
     int k = 0; 
     int t = 0; 
     while (index < playerNumbers.Length) 
     { 
      if (index != playerCount) 
      { 
       newArray[j] = playerNumbers[index]; 
       j++; 
      } 

      index++; 
     } 

     while (index2 < playerLastName.Length) 
     { 
      if (index2 != playerCount) 
      { 
       newArray2[k] = playerLastName[index2]; 
       k++; 
      } 

      index2++; 
     } 
      while (index3 < playerLastName.Length) 
     { 
      if (index3 != playerCount) 
      { 
       newArray3[t] = playerPoints[index3]; 
       t++; 
      } 

      index3++; 
     } 
     return newArray;   
    } 

    static void DeletePlayer(Int32[] playerNumbers, String[] playerLastName, Int32[] playerPoints, ref Int32 playerCount, Int32 MAXPLAYERS) 
    { 
     int player;// Player number to delete 
     int playerindex;//index of the player number in Array 
     if (playerCount < MAXPLAYERS) 
     { 

      player = GetPositiveInteger("\nDelete Player: please enter the player's number"); 
      playerindex = GetPlayerIndex(player, playerNumbers, playerCount); 


      if (playerindex != -1) 
      { 

       { 

        Console.WriteLine("\nDelete Player: Number - {0}, Name - {1}, Points - {2}", playerNumbers[playerindex], playerLastName[playerindex], playerPoints[playerindex]); 
        Console.WriteLine("Succesfully Deleted"); 
        Console.WriteLine(); 
        ProcessDelete(playerNumbers, ref playerCount, playerLastName, playerPoints); 
       } 
      } 
      else 
       Console.WriteLine("\nDelete Player: player not found"); 
     } 
     else 
      Console.WriteLine("\nDelete Player: the roster is empty"); 
    } 

} 

}

+0

昨天有沒有人問過類似的問題? – 2014-11-03 01:29:21

+2

如果您查看異常的堆棧跟蹤,它會精確地告訴您發生異常的位置。如果您在調試器中運行代碼,那麼調試器不僅會告訴您發生異常的位置,還會讓您實際查找超出範圍的變量。如果一旦您確切知道發生異常的位置和方式,您仍然不知道如何解決問題,那麼您可以使用具體問題更新問題,解釋您遇到的具體問題。 – 2014-11-03 01:29:42

+0

如果您將'ProcessDelete'的調用註釋掉,應用程序是否不會拋出錯誤?還有什麼'player'和'playerindex'的值被生成? – 2014-11-03 01:30:32

回答

0

在你的第三個循環中你有:

newArray3[t] = playerPoints[index2]; 
k++; 

它應該是:

newArray3[t] = playerPoints[index3]; 
t++; 
+0

在同一個地方,index2正在使用,應該是index3。可能應該只有一個循環。 – 2014-11-03 01:53:42

+0

@ BenVoigt:對,使用'index2'可能是錯誤信息的原因,增加'k'而不是't'只會丟棄除最後一項以外的所有項目。對三個數組使用一個循環會更好,但也許一個包含三個屬性的對象數組是最好的。 – Guffa 2014-11-03 02:02:03