0

如果我试试这个:

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;
    }   
}
4

2 回答 2

0

如果您的输入字符串不包含空格,这可能会调用“数组超出范围”异常:

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

您还应该检查,是否count大于等于0,因为如果它小于0,则尝试创建一个大小错误的数组,

于 2015-02-13T07:58:37.883 回答
0

TryParse如果它无法解析输入并将值设置count为 0,则将返回 False,这意味着您将创建一个长度为 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");
}
于 2015-02-13T08:04:13.600 回答