Замена данных в файле со списком рекордов - 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);
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы