user3055553
user3055553

Reputation: 55

Index array out of bounds

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

This code checks to see whether the answer given doesn't go past 6 or below 1, however whenever I run it, it does it anyway then it throws the out of array error, anybody help?

Upvotes: 1

Views: 142

Answers (3)

gembird
gembird

Reputation: 14053

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

Upvotes: 1

ookamijin
ookamijin

Reputation: 84

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

This conditional should be AND rather than OR. Also, since you're parsing the string before the conditional, you don't need to do it inside it, so you should change that part to:

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

Your other if statement was also kind of redundant because you already have other variable (dicecheck) with the value, so remove it.

Upvotes: 6

Bruno Costa
Bruno Costa

Reputation: 2720

Lets imagine the user introduce -1.

In the first condition you are validating if -1 >= 1 which is false, but you are also validating if -1 <= 6 which is true.

Instead of && (AND ALSO) you are using || (Or Else).

Since one of the condition is always true, the validating will always return true and therefore the code will run throwing an error.

Upvotes: 0

Related Questions