ОШИБКА: System.FormatException: входная строка имеет неправильный формат

Если я попробую это:

int count = int.TryParse(Console.ReadLine(), out count) ? count : default(int);

вместо этого: int count = int.Parse(Console.ReadLine());

проблема решена, но потом выдает ошибку Array out of range. Что я должен делать ?

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


class Player
{
    static void Main(String[] args)
    {
        string[] inputs;

        // game loop
        while (true)
        {
            int count = int.Parse(Console.ReadLine()); // The number of current enemy ships within range
            Console.Error.WriteLine("Count:" + count);

            Enemy[] enemys = new Enemy[count];

            for (int i = 0; i < count; i++)
            {
                inputs = Console.ReadLine().Split(' ');
                enemys[i] = new Enemy(inputs[0], int.Parse(inputs[1]));
            }

            Array.Sort(enemys, delegate(Enemy en1, Enemy en2) {
                    return en1.Dist.CompareTo(en2.Dist);
                  });

            Console.WriteLine(enemys[0].Name);
        }
    }
}


public class Enemy{
    public string Name;
    public int Dist;

    public Enemy(string name, int dist){
        this.Name = name;
        this.Dist = dist;
    }   
}

person Necati Turan    schedule 13.02.2015    source источник
comment
По крайней мере, скажите, где возникает ошибка для начала, я бы представил, что вы не получаете результатов для inputs, вы должны проверить, что это имеет 2 значения   -  person Sayse    schedule 13.02.2015
comment
Моя первая проблема: входная строка имеет неправильный формат для подсчета целых чисел. Я попытался решить с помощью метода TryParse. Однако это дает другую ошибку для строки Console.WriteLine(enemys[0].Name); и это был индекс массива вне допустимого диапазона. у игрока   -  person Necati Turan    schedule 13.02.2015
comment
Пожалуйста, улучшите свой вопрос и заголовок вопроса. Где именно произошло исключение? Что вы уже изменили в своем коде?   -  person BendEg    schedule 13.02.2015


Ответы (2)


Это может вызвать исключение «Массив вне диапазона», если ваша входная строка не содержит пробелов:

inputs = Console.ReadLine().Split(' ');
enemys[i] = new Enemy(inputs[0], int.Parse(inputs[1]));

Вы также должны проверить, больше ли count равно 0, потому что, если он меньше 0, вы пытаетесь создать массив с неправильным размером,

person BendEg    schedule 13.02.2015

TryParse вернет False, если ему не удастся проанализировать ввод, а также установить значение count равным 0, это означает, что вы затем создаете массив нулевой длины, но пытаетесь получить доступ к первому несуществующему элементу этого массива.

enemys[0].Name; // This won't exist because enemy's list is empty

Для начала вы должны заставить пользователя ввести правильное значение.

int count;
while(!int.TryParse(Console.ReadLine(), out count)
{
    Console.WriteLine("Not a valid value! Try Again");
}
person Sayse    schedule 13.02.2015
comment
Я думаю, ему нужно разобрать Console.ReadLine().Split(' ')[1], так как это то, что OP делает в цикле. - person Tim Schmelter; 13.02.2015
comment
Невозможно неявно преобразовать тип string' to string[]' - person Necati Turan; 13.02.2015
comment
Это проект codingame.com. Я не знаю, связано ли это с их компилятором или нет, но он выдает ошибку Unexpected { прямо сейчас. Вот это проект: codingame.com/ide/1020344fffa484480200e7a01eaf8365b1412c1. - person Necati Turan; 13.02.2015
comment
@NecatiTuran - Помимо проверки этого значения, вы должны проверить, что разделение внутри цикла содержит 2 значения (inputs.Length >= 2). Вам также может понадобиться другая проверка ошибок. - person Sayse; 13.02.2015
comment
Кроме того, как упомянул @TimSchmelter (ура), вам также нужно будет проверить, что второе разделение действительно является допустимым целым числом (подсказка: вы можете снова использовать попытку синтаксического анализа) - person Sayse; 13.02.2015