Замена данных в файле со списком рекордов - C#
Формулировка задачи:
подскажите как откорректировать код чтобы справить ошибки, во-первых, при попытки замены очков пользователя, он заменяет у старого и и дублирует запись, во-вторых, при попытке записи в чистый документ запись не происходит
class Program { class Score { public string name; public int score; public static explicit operator Score(string v) { throw new NotImplementedException(); } } static void Main(string[] args) { Random rnd = new Random(); int score = 0; #region // 1 score = score + Test(rnd.Next(1, 10), rnd.Next(1, 10)); #endregion List<Score> scoreTable = ReadScores(); Score newScore = new Score(); Console.WriteLine("Введите имя пользователя"); string nameUsers = Console.ReadLine(); Console.WriteLine("Введите команду"); string command = Console.ReadLine(); if (command == "clear") { System.IO.File.Delete("scores.txt"); System.IO.File.Create("scores.txt"); return; } Console.Clear(); for (int i = 0; i < scoreTable.Count; i++) { if (scoreTable[i].name == nameUsers) { scoreTable[i].name = nameUsers; scoreTable[(i)].score = score; } else { newScore.name = nameUsers; newScore.score = score; } } scoreTable.Add(newScore); scoreTable.Sort(CompareScore); if (scoreTable.Count > 7) { scoreTable.RemoveRange(7, scoreTable.Count - 7); } DrawScores(scoreTable); SaveScores(scoreTable); Console.ReadKey(); } static int CompareScore(Score r1, Score r2) { return r2.score - r1.score; } private static List<Score> ReadScores() { if (System.IO.File.Exists("scores.txt") == false) { System.IO.File.Create("scores.txt"); } string rawData = System.IO.File.ReadAllText("scores.txt"); string[] parsedData; parsedData = rawData.Split(new string[] { " ", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); List<Score> scoreTable = new List<Score>(); for (int i = 0; i < parsedData.Length - 1; i += 2) { Score userScore = new Score(); userScore.name = parsedData[i]; userScore.score = Convert.ToInt32(parsedData[i + 1]); scoreTable.Add(userScore); } return scoreTable; } private static void SaveScores(List<Score> scoreTable) { string rawData = ""; for (int i = 0; i < scoreTable.Count; i++) { rawData += scoreTable[i].name + " " + scoreTable[i].score + "\r\n"; } System.IO.File.WriteAllText("scores.txt", rawData); } private static void DrawScores(List<Score> results) { Console.WriteLine("Таблица рекордов."); for (int i = 0; i < results.Count; i++) { Console.CursorLeft = 0; Console.Write("{0}.{1}", i + 1, results[i].name); Console.CursorLeft = 30; Console.WriteLine(results[i].score); if (i == results.Count - 1) { Console.CursorLeft = 0; Console.Write("Свободное место"); Console.CursorLeft = 30; Console.WriteLine("0"); } } }
Решение задачи: «Замена данных в файле со списком рекордов»
textual
Листинг программы
for (int i = 0; i < parsedData.Length; i += 2) { Score userScore = new Score(); userScore.name = parsedData[i]; userScore.score = Convert.ToInt32(parsedData[i + 1]);//ошибка "индекс находится вне границ массива" возникает периодически scoreTable.Add(userScore); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д