索引数组超出范围

时间:2013-12-09 18:45:34

标签: c#

if (testModetrue)
{
    try
    {
        Console.Write("What number do you want the roll to be set to? (1-6)");
        string diceString = Console.ReadLine();
        int diceCheck = int.Parse(diceString);
        if ((diceCheck >= minDiceValue) || (diceCheck <= maxDiceValue))
        {
            diceNo = int.Parse(diceString);
        }
        else if ((diceCheck <= minDiceValue) || (diceCheck >= maxDiceValue))
        {
            Console.WriteLine("Please enter a number between 1-6.");
            break;
        }
    }
    catch (Exception)
    {
        Console.WriteLine("An error has occured.");
        return;
    }
}

此代码检查给出的答案是否超过6或低于1,但是无论何时运行它,无论如何它会抛出数组错误,有人帮忙吗?

3 个答案:

答案 0 :(得分:6)

int diceCheck = int.Parse(diceString);
if ((diceCheck >= minDiceValue) || (diceCheck <= maxDiceValue))
{
    diceNo = int.Parse(diceString);
}

此条件应为AND而不是OR。此外,由于您在条件之前解析字符串,因此您不需要在其中进行,因此您应该将该部分更改为:

int diceCheck = int.Parse(diceString);
if (diceCheck > maxDiceValue && diceCheck < minDiceValue)
{
   Console.Writeline("Please write a number between 1 and 6");
   break;
}

你的其他if语句也是多余的,因为你已经有了其他变量(dicecheck),所以删除它。

答案 1 :(得分:1)

private const int maxDiceValue = 6;
private const int minDiceValue = 1;

Console.Write("What number do you want the roll to be set to? (1-6)");
string diceString = Console.ReadLine();
int diceCheck;

if (!int.TryParse(diceString, out diceCheck) ||
  diceCheck < minDiceValue ||
  diceCheck > maxDiceValue) {
  Console.WriteLine("Please enter a number between 1-6.");
  return;
}

// add diceCheck to array here

答案 2 :(得分:0)

让我们想象用户介绍-1。

在第一个条件中,您要验证-1&gt; = 1是否为假,但您也在验证-1&lt; = 6是否为真。

而不是&amp;&amp; (还有)你正在使用|| (要不然)。

由于其中一个条件始终为true,因此验证将始终返回true,因此代码将运行抛出错误。