Поскольку вы кодируете на C#, объектно-ориентированном языке, вам следует рассмотреть возможность использования объектов. Вы можете объявить свой собственный класс для игрока, удерживая информацию, которую вы вводите каждый раз.
Затем, когда вы сортируете по имени и позиции игрока, все поля сортируются, потому что вы сортируете всех игроков между ними как целое, а не поле c.
Вы можете определить свой класс как:
public class Player
{
public string Name { get; set; }
public string Position { get; set; }
public int AtBats { get; set; }
public int Hits { get; set; }
}
Вы можете избавиться от нескольких массивов и использовать: Player[] players = new Player[3];
И в вашем l oop вы можете создавать игроков следующим образом:
for (int i = 0; i < players.Length; i++)
{
var player = new Player();
WriteLine("Enter players name");
player.Name = ReadLine();
WriteLine("Enter Players Position");
player.Position = ReadLine();
WriteLine("Enter Players at bats");
player.AtBats = Convert.ToInt32(ReadLine());
WriteLine("Enter Players hits");
player.Hits = Convert.ToInt32(ReadLine());
players[i] = player;
}
Надежда, которая немного прояснит ситуацию и поможет вам начать.
Что касается Само сравнение, у вас есть несколько способов сделать это. Если вы хотите использовать Array вместо List, самым простым способом будет Player
реализовать интерфейс IComparable
. Таким образом, каждый объект Player будет знать, как сравнивать себя с другим игроком.
Если я правильно понимаю, вы хотите отсортировать их сначала по имени, а затем по позиции? Затем вы можете изменить класс Player следующим образом:
public class Player : IComparable
{
public string Name { get; set; }
public string Position { get; set; }
public int AtBats { get; set; }
public int Hits { get; set; }
public int CompareTo(object obj)
{
if (obj == null) return 1;
var otherPlayer = obj as Player;
int result = this.Name.CompareTo(otherPlayer.Name);
if (result == 0)
{
result = this.Position.CompareTo(otherPlayer.Position);
}
return result;
}
}
Затем для сортировки игроков будет простой вызов: Array.Sort(players);
и второй l oop вашей программы станет:
//for loop to traverse the arrays and display user input data in tabular format
Array.Sort(players);
for (int x = 0; x < players.Length; x++)
{
var player = players[i];
float playerBA = (float)player.Hits / player.AtBats;
WriteLine("{0, -10}{1, -10}{2, -5}{3, -5}{4, -5}{5, -4}", teamName, player.Name, player.Position, player.AtBats, player.Hits, playerBA.ToString("F3"));
}
Просто примечание: вы сортировали массив 3 раза, но он был нужен только один раз. Здесь у вас есть 3 элемента, это не имеет значения, но если бы у вас было гораздо больше элементов, это стоило бы вам.
Вам также не нужен .ToString("d")
, так как это значение по умолчанию для целого числа и преобразование .ToString()
происходит автоматически при вызове WriteLine.