2014-11-14 4 views
-1

Я создал класс игрока, и я пытаюсь использовать свой класс игрока, чтобы удалить плеер для моей программы, управляемой меню, но я продолжаю получать ошибку: Can not Implicitly convert type int [] to int 'с моим методом ProcessDelete. Мой метод ProcessDelete должен удалить все данные игрока, когда пользователь вводит номер игрока.Невозможно Implicitly конвертировать тип int [] в int

Любая помощь будет оценена по достоинству.

 static Int32 ProcessDelete(Player[] players, Int32 RemoveAt) 
     { 

      Int32[] newIndicesArray = new Int32[players.Length - 1]; 

      int i = 0; 
      int j = 0; 
      while (i < players.Length) 
      { 
       if (i != RemoveAt) 
       { 
        newIndicesArray[j] = players[i]; 
        j++; 
       } 

       i++; 
      } 

      return newIndicesArray; 
     } 


     static void DeletePlayer(Int32 number, String firstName, String lastName, Int32 goals, 
      Int32 assists, Player[] players, 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(number, firstName, lastName, goals, assists, players, ref playerCount); 


       if (playerindex != -1) 
       { 

        { 

         Console.WriteLine("\nDelete Player: Number - {0}, Name - {1}, Points - {2}", players[playerindex].Number, firstName[playerindex], lastName[playerindex], players[playerindex].Goals, players[playerindex].Assists); 
         Console.WriteLine("Succesfully Deleted"); 
         Console.WriteLine(); 
         ProcessDelete(players); 
        } 
       } 
       else 
        Console.WriteLine("\nDelete Player: player not found"); 
      } 
      else 
       Console.WriteLine("\nDelete Player: the roster is empty"); 
     } 

    } 
} 
+0

Какая часть ошибки вы не понимаете? – SLaks

ответ

1

Ваш метод ProcessDelete возвращает массив, но его подпись указывает, что она должна вернуть int.

Вы ничего с возвращаемым значением не делать в любом случае, так просто изменить подпись void:

static void ProcessDelete(Player[] players, Int32 RemoveAt) 

И удалить return линию от конца этого метода:

return newIndicesArray; // remove this 

FWIW, вы можете рассмотреть возможность использования коллекции List<Player> вместо массива Player[].

Как только у вас есть индекс, вы можете легко удалить необходимый элемент, используя RemoveAt(), а весь метод ProcessDelete() может просто исчезнуть.

List<Player> players = new List<Player>; 
... 
// some code to add players 
... 
int indexToRemove = GetPlayerIndex(...); 

players.RemoveAt(indexToRemove); 
+1

Это его проблема +1. Похоже, он захочет вернуть значение, но все это настолько запутанно, что я не могу понять это. – Jonesopolis

+1

@ Jonesy Согласен, это трудно понять. Я думаю, ему было бы намного лучше манипулировать «List », а не делать то, что он пытается сделать с «Player []». –

0

В методе ProcessDelete вы возвращаете массив целых чисел, но ваша сигнатура метода говорит, что возвращает один int. Я предполагаю, что вы хотели вернуть один из i или j?

0

Конвертирование Int32[] в Int32 не допускается попробовать это:

static Int32[] ProcessDelete(Player[] players, Int32 RemoveAt) //Change Int32 to In32[] 
    { 
     Int32[] newIndicesArray = new Int32[players.Length - 1]; 

     int i = 0; 
     int j = 0; 
     while (i < players.Length) 
     { 
      if (i != RemoveAt) 
      { 
       newIndicesArray[j] = players[i]; 
       j++; 
      } 

      i++; 
     } 

     return newIndicesArray; 
    } 
0

Вы должны изменить тип данных вашей функции, потому что она возвращает массив целых чисел, поэтому он должен иметь подпись, как показано ниже:

static Int32[] ProcessDelete(...) 
Смежные вопросы