- Home /
my QandA array is not working when you choose 3 wrong answers
okay my problem is when i have 3 wrong answers and 1 correct the program will stop saying argument is out of range and i dont know why but when i only choose the correct answers its working well so here's the code and thank you in advance
public class wawa : MonoBehaviour {
private bool Poop;
public string Info;
private List<string[]> questions = new List<string[]>();
private List<int> answerOrder = new List<int>(new int[] {1,2,3,4});
void DrawInfo() {
Rect rect = new Rect(500, 100, 400, 200);
Rect close = new Rect(600, 500, 200, 100);
if(GUI.Button(close, "ATTACK")) {
Poop = !Poop;
}
if (Poop) {
GUI.Box(rect, Info);
GUI.Label(new Rect(520, 110, 400, 30), questions[0][0]);
if (GUI.Button(new Rect(520, 200, 100, 30), questions[0][answerOrder[0]])) {
HandleAnswer(answerOrder[0]);
}
if (GUI.Button(new Rect(520, 250, 100, 30), questions[0][answerOrder[1]])) {
HandleAnswer(answerOrder[1]);
}
if (GUI.Button(new Rect(780, 200, 100, 30), questions[0][answerOrder[2]])) {
HandleAnswer(answerOrder[2]);
}
if (GUI.Button(new Rect(780, 250, 100, 30), questions[0][answerOrder[3]])) {
HandleAnswer(answerOrder[3]);
}
}
}
private void HandleAnswer(int answer) {
if (answer == 1) {
NextQuestion();
}
else {
}
}
void OnGUI() {
if(questions.Count > 0) {
DrawInfo();
}
}
void Start() {
// String order: question, correct, wrong, wrong, wrong
questions.Add(new string[] { "What in the capital of France?", "Paris", "New York", "London", "Madrid" });
questions.Add(new string[] { "Which of these is an amphibian?", "Frog", "Shark", "Lizard", "Hawk" });
questions.Add(new string[] { "Which of these is an planet?", "Neptune", "Thor", "Pegasus", "Hera" });
questions.Add(new string[] { "Which of these is smallest planet?", "Pluto", "Thor", "Pegasus", "Hera" });
questions.Add(new string[] { "What in the capital of Philippines?", "Manila", " Las Pinas", "Makati", "Bulacan" });
Shuffle(questions);
Shuffle(answerOrder);
}
void NextQuestion() {
questions.RemoveAt(0);
Shuffle(answerOrder);
}
static readonly System.Random rng = new System.Random();
public static void Shuffle<T>(IList<T> list) {
int n = list.Count;
while(n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
Duplicate:
http://answers.unity3d.com/questions/641707/array-problem-index-out-of-range-why-.html
Please don't post the same question multiple times. You should react to the answers you got and wait for a reply. If you have new information, either edit the question or add a comment to your question.
Answer by Berenger · Feb 17, 2014 at 01:21 PM
When you answer the last question, the list questions becomes empty DURING the GUI loop. If the answer is the second one, you'll get an error for the third one because questions is empty. Either check if questions is empty for each button, or empty it at another time.
im really sory im really new at scripting but how can i fix this please help me im out of idea ive been fixing this for days for my thesis project
+1
You could add this line at the end of your "NextQuestion" method:
GUIUtility.ExitGUI();
It will immediately ter$$anonymous$$ate the current OnGUI iteration, flush the layout buffer and start over next frame.
Another way could be to add a local int variable inside DrawInfo method just before you draw the first button and set it to 0. Then each button just sets the variable of the choosen answer and at the very end of OnGUI you check if your variable is greater than 0 (since your answers are 1,2,3,4).
Something like this:
void DrawInfo()
{
// [...]
int answer = 0;
if (GUI.Button(new Rect(520, 200, 100, 30), questions[0][answerOrder[0]])) {
answer = answerOrder[0];
}
// [...]
if (answer > 0)
HandleAnswer(answer);
}
thankyou very much sir you solved it, and you really help me thankyou