2013-10-17 73 views
1

嗨,我有一個任務,我必須創建一個程序,其中包含三個數組,其中一個爲人名,一個爲得分點,一個爲玩家號碼,現在我已經完成了所有的陣列和事情,但我很困惑,我將如何檢索條目,更新條目或刪除條目,到目前爲止我的工作選項是創建玩家,列隊員和退出另外兩個我不知道該怎麼做,一些正確的方向指導將真正幫助請和謝謝。數組以及如何更新,刪除和檢索條目

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace PlayerSystem6 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //The MAXPLAYERS constant is the physical table size 
      const Int32 MAXPLAYERS = 23; 

      //Declare the player tables 
      Int32[] playerNumbers = new Int32[MAXPLAYERS]; 
      String[] playerLastNames = new String[MAXPLAYERS]; 
      Int32[] playerPoints = new Int32[MAXPLAYERS]; 

      //Keep track of the actual number of players (i.e. logical table size) 
      Int32 playerCount = 0; 

      //Main Driver 
      char menuItem; 
      Console.WriteLine("Welcome to the player system...\n"); 
      menuItem = GetMenuItem(); 
      while (menuItem != 'X') 
      { 
       ProcessMenuItem(menuItem, playerNumbers, playerLastNames, playerPoints, ref playerCount, MAXPLAYERS); 
       menuItem = GetMenuItem(); 
      } 
      Console.WriteLine("\nThank you, goodbye"); 
      Console.ReadLine(); 
     } 

     //Returns either a 'C', 'R', 'U', 'D', 'L', or 'X' to the caller 
     static char GetMenuItem() 
     { 
      char menuItem; 
      DisplayMenu(); 
      menuItem = char.ToUpper(char.Parse(Console.ReadLine())); 
      while (menuItem != 'C' 
       && menuItem != 'L' && menuItem != 'X') 
      { 
       Console.WriteLine("\nError - Invalid menu item"); 
       DisplayMenu(); 
       menuItem = char.ToUpper(char.Parse(Console.ReadLine())); 
      } 
      return menuItem; 
     } 

     static void DisplayMenu() 
     { 
      Console.WriteLine("\nPlease pick an item:"); 
      Console.WriteLine("C - Create Player"); 
      Console.WriteLine("R - Retrieve Player"); 
      Console.WriteLine("U - Update Player"); 
      Console.WriteLine("D - Delete Player"); 
      Console.WriteLine("L - List Players"); 
      Console.WriteLine("X - Exit"); 
     } 

     //Routes to the appropriate process routine based on the user menu choice 
     static void ProcessMenuItem(Char menuItem, Int32[] playerNumbers, String[] playerLastNames, 
      Int32[] playerPoints, ref Int32 playerCount, Int32 MAXPLAYERS) 
     { 
      switch (menuItem) 
      { 
       case 'C': 
        ProcessCreate(playerNumbers, playerLastNames, playerPoints, ref playerCount, MAXPLAYERS); 
        break; 
       case 'L': 
        ProcessList(playerNumbers, playerLastNames, playerPoints, playerCount); 
        break; 
      } 
     } 

     //Creates a player in the tables if the array is not already full and the name is not a duplicate 
     static void ProcessCreate(Int32[] playerNumbers, String[] playerLastNames, 
      Int32[] playerPoints, ref Int32 playerCount, Int32 MAXPLAYERS) 
     { 
      Int32 number, points; 
      String lastName; 
      if (playerCount < MAXPLAYERS) 
      { 
       number = GetPositiveInteger("\nCreate Player: please enter the player's number"); 
       if (GetPlayerIndex(number, playerNumbers, playerCount) == -1) 
       { 
        lastName = GetString("\nCreate Player: please enter the player's last name"); 
        points = GetPositiveInteger("\nCreate Player: please enter the player's points"); 
        InsertPlayer(number, lastName, points, playerNumbers, playerLastNames, playerPoints, ref playerCount); 
        Console.WriteLine("\nCreate Player: Number - {0}, Name - {1}, Points - {2}, created successfully", number, lastName, points); 
        Console.WriteLine(); 
       } 
       else 
        Console.WriteLine("\nCreate Player: the player number already exists"); 
      } 
      else 
       Console.WriteLine("\nCreate Player: the player roster is already full"); 

     } 

     //Inserts the player at the correct location in the tables based on order of 
     //ascending player number. Unless the insert location is at the end, this 
     //requires shifting existing players down in order to make room 
     static void InsertPlayer(Int32 number, String lastName, Int32 points, 
      Int32[] playerNumbers, String[] playerLastNames, Int32[] playerPoints, 
      ref Int32 playerCount) 
     { 
      /* PUTS DATA IN NEXT AVALIABLE SLOT 
      playerNumbers[playerCount] = number; 
      playerLastNames[playerCount] = lastName; 
      playerPoints[playerCount] = points; 
      playerCount++; 
      */ 

      // PUTS DATA IN PLAYER ASECENDING ORDER 
       Int32 insertIndex, shiftCount; 
       insertIndex = GetInsertIndex(number, playerNumbers, playerCount); 
       for (shiftCount = playerCount; shiftCount > insertIndex; shiftCount--) 
       { 
        playerNumbers[shiftCount] = playerNumbers[shiftCount - 1]; 
        playerLastNames[shiftCount] = playerLastNames[shiftCount - 1]; 
        playerPoints[shiftCount] = playerPoints[shiftCount - 1]; 
       } 
       playerNumbers[insertIndex] = number; 
       playerLastNames[insertIndex] = lastName; 
       playerPoints[insertIndex] = points; 
       playerCount++; 

     } 
     //Returns the index of the first player number in the table that is greater 
     //than the player number to be inserted 
     static Int32 GetInsertIndex(Int32 playerNumber, Int32[] playerNumbers, 
      Int32 playerCount) 
     { 
      Int32 index = 0; 
      bool found = false; 
      while (index < playerCount && found == false) 
       if (playerNumbers[index] > playerNumber) 
        found = true; 
       else 
        index++; 
      return index; 
     } 

     //Returns the index of the player number in the table 
     //or -1 if the number is not found 
     static Int32 GetPlayerIndex(Int32 playerNumber, 
      Int32[] playerNumbers, Int32 playerCount) 
     { 
      Int32 index = 0; 
      bool found = false; 
      while (index < playerCount && found == false) 
       if (playerNumbers[index] == playerNumber) 
        found = true; 
       else 
        index++; 
      if (found == false) 
       index = -1; 
      return index; 
     } 

     //Lists the players in the tables 
     static void ProcessList(Int32[] playerNumbers, String[] playerLastNames, 
      Int32[] playerPoints, Int32 playerCount) 
     { 

      if (playerCount > 0) 
      { 
       Console.WriteLine("\n{0,7} {1,-25}{2,6}\n", "Number", "Last Name", "Points"); 
       for (Int32 player = 0; player < playerCount; player++) 
        Console.WriteLine("{0,7} {1,-25}{2,6}", playerNumbers[player], playerLastNames[player], playerPoints[player]); 
      } 
      else 
       Console.WriteLine("\nList Players: the roster is empty"); 
     } 

     //Returns a positive integer 
     static Int32 GetPositiveInteger(String prompt) 
     { 
      Int32 n; 
      Console.WriteLine(prompt); 
      n = Int32.Parse(Console.ReadLine()); 
      while (n < 0) 
      { 
       Console.WriteLine("\nError: enter positive value"); 
       Console.WriteLine(prompt); 
       n = Int32.Parse(Console.ReadLine()); 
      } 
      return n; 
     } 

     //Returns a non-empty string 
     static String GetString(String prompt) 
     { 
      String returnString; 
      Console.WriteLine(prompt); 
      returnString = Console.ReadLine(); 
      while (returnString == "") 
      { 
       Console.WriteLine("\nError: must enter keyboard data"); 
       Console.WriteLine(prompt); 
       returnString = Console.ReadLine(); 
      } 
      return returnString; 
     } 
    } 
} 

回答

2

您無法添加或刪除C#數組中的值。數組的大小是固定的。也就是說,你可以改變任何元素的值,你可以重新分配一個新的數組(減號和元素或附加元素)到原始變量。

int[] IDs = new int[] { 1, 2, 3 }; 
IDs[2] = 55; // was 3 

IDs = new [] { 1, 2, 4, 5, 6 }; 

你也可以看看泛型列表List<>()可以插入,更新或已刪除。

+0

感謝所以在'int [] UDs = new int [] {1,2,3};方括號內我會把我想要改變的例如如果我想更新這些playerNumbers,playerLastNames之一, playerPoints,它會變成'int [playerNumbers] ID = new int [playerNumbers] {1,2,3};'? – Shahze123

+0

我已經知道我需要用新方法創建新流程,就像我與其他人一樣,但我仍然不確定我將如何使用您提供的代碼以及如何在我的程序中實現它,我是一名初學者程序員,所以我不確定。 – Shahze123

相關問題