Click here to Skip to main content
14,693,622 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi guys, I'm making a quiz game in Unity Engine. I am getting an error like IndexOutOfRangeException: Index was outside the bounds of array. GameManager.GetRandomQuestion(). Codes are:
//Variables
    private List<AnswerData> PickedAnswers = new List<AnswerData>();
    private List<int> FinishedQuestions = new List<int>();
    private int currentQuestion = 0;

//Methods
   Question GetRandomQuestion()
   {
       var randomIndex = GetRandomQuestionIndex();
       currentQuestion = randomIndex;

       return data.Questions[currentQuestion];
   }
   int GetRandomQuestionIndex()
   {
       var random = 0;


       if (FinishedQuestions.Count < data.Questions.Length)
       {
           do
           {
               random = UnityEngine.Random.Range(0, data.Questions.Length);
           } while (FinishedQuestions.Contains(random) || random == currentQuestion);
       }
       return random;


//Data Class

[System.Serializable()]
public class Data
{
    public Question[] Questions = new Question[0];

    public Data(){}

    public static void Write(Data data, string path)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Data));
        using (Stream stream = new FileStream(path,FileMode.Create))
        {
            serializer.Serialize(stream, data);
        }
    }
    public static Data Fetch(string filePath)
    {
        return Fetch(out bool result,filePath);
    }
    public static Data Fetch(out bool result, string filePath)
    {
        if (File.Exists(filePath)) 
        {
            result = false;
            return new Data();
        }
        XmlSerializer deserializer = new XmlSerializer(typeof(Data));
        using (Stream stream = new FileStream(filePath, FileMode.Open))
        {
            var data = (Data)deserializer.Deserialize(stream);

            result = true;
            return data;
        }
    }
}


What I have tried:

I could'n find where index out of range. So I couldn't do anything but search it in google.
Posted
Updated 25-Sep-20 0:12am

Quote:
I am getting an error like IndexOutOfRangeException: Index was outside the bounds of array.

The complete error message also tells you the position of error, it is a good idea to tell us too.
No matter where is the error, your code try to read/write an item of an array that does not exist. One tool can help you to understand what is wrong, it is the debugger.

Your code do not behave the way you expect, or you don't understand why !

There is an almost universal solution: Run your code on debugger step by step, inspect variables.
The debugger is here to show you what your code is doing and your task is to compare with what it should do.
There is no magic in the debugger, it don't know what your code is supposed to do, it don't find bugs, it just help you to by showing you what is going on. When the code don't do what is expected, you are close to a bug.
To see what your code is doing: Just set a breakpoint and see your code performing, the debugger allow you to execute lines 1 by 1 and to inspect variables as it execute.

Debugger - Wikipedia, the free encyclopedia[^]

Mastering Debugging in Visual Studio 2010 - A Beginner's Guide[^]
Basic Debugging with Visual Studio 2010 - YouTube[^]

Debugging C# Code in Visual Studio - YouTube[^]

The debugger is here to only show you what your code is doing and your task is to compare with what it should do.
   
Comments
CPallini 25-Sep-20 5:59am
   
5.
Patrice T 25-Sep-20 6:12am
   
Thank you
||Memo|| 26-Sep-20 5:19am
   
I knew what does error code means. I used debugger so many times and i found because of Fetch method couldn't find JSON file path. Thanks for the answer and your patience.
Look at your code:
public class Data
{
    public Question[] Questions = new Question[0];

Question GetRandomQuestion()
{
    var randomIndex = GetRandomQuestionIndex();
    currentQuestion = randomIndex;

    return data.Questions[currentQuestion];
}
Because Questions is declared as an array with zero length and is never changed, any index value - including zero - will be out of range: there are no elements at all to access!

In future, use the debugger: it would show you where and what this problem is a lot more quickly and easily than posting a question here!
   
Comments
Richard MacCutchan 25-Sep-20 5:13am
   
"In future, use the debugger"
Or <Father Ted voice>"Just read the feckin code, Dougal."</Father Ted voice>
CPallini 25-Sep-20 5:58am
   
5.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900