- Home /
Question by
randomhilton · Jul 31, 2015 at 02:46 PM ·
errorarraylist
ArgumentOutOfRangeException: Index is less than 0 or more than or equal to the list count.
hi i keep getting this error can anybody tell me why ?
using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; public class TextController : MonoBehaviour {
// Use this for initialization
public Text text;
public Text invi;
public ArrayList invertory = new ArrayList();
private enum States {start, celle, seng_0, seng_1, spejl, dør,gang}
private States myState;
void Startgame()
{
myState = States.start;
text.text = "Du er i din fængsel celle du er blevet sat der ind af det korrupte system nu er det op til dig at komme ud uden der er nogen der ser dig !\n\n" +
"tryk mellemrums tasten for at starte";
}
void Start ()
{
Startgame ();
}
// Update is called once per frame
void Update ()
{
if (myState == States.celle) {state_celle();}
if (Input.GetKeyDown (KeyCode.I)) {getinvertory ();}
else if (myState == States.seng_0) {
state_seng_0 ();
} else if (Input.GetKeyDown (KeyCode.Space)) {
myState = States.celle;
} else if (myState == States.seng_1) {
state_seng_1 ();
} else if (myState == States.dør) {state_dør();}
}
//start celle
void state_celle()
{
text.text ="Du kigger dig omkring i din celle der er tre ting du har din seng, dit spejl og låsen på døren\n" +
"tryk S for at gå hen til sengen\n"+
"tryk D for at gå hen til døren\n"+
"tryk V for at gå hen til spejlet";
if (Input.GetKeyDown (KeyCode.S)) {myState = States.seng_0;}
}
void state_seng_0()
{
text.text = "Du går hen til sengen, du kigger lidt sengetøjet har ikke været vasket i en måned eller to, det lugter og er gult,\n" +
"lanet er langt og kan måske bruges senere tryk E for at tage lanet med dig\n" +
"tryk R for at komme tilbage";
if (Input.GetKeyDown (KeyCode.E))
{
if(invertory.Count <= 0){
invertory.Add("Lagenet fra sengen,");
myState = States.seng_1;}
else if (invertory.Contains("Lagenet fra sengen,"))
{ invi.text = "du har allerede taget lanet";
invi.enabled = true;
StartCoroutine(Distro());
}
if (Input.GetKeyDown (KeyCode.D)) {myState = States.dør;}
else if (Input.GetKeyDown (KeyCode.R)){myState = States.celle;}
}
else if (Input.GetKeyDown(KeyCode.R)) {myState = States.celle;}
}
void state_seng_1()
{
text.text ="Du har nu taget lanet\n" +
"tryk D for at gå hen til døren\n"+
"tryk V for at gå hen til spejlet";
if (Input.GetKeyDown (KeyCode.D)) {myState = States.dør;}
else if (Input.GetKeyDown (KeyCode.V)) {myState = States.spejl;}
}
void state_dør ()
{
text.text ="Du Kigger på Døren det en klassik celle dør du hiver lidt i døren den rykker sig overhoved ikke, du kigger på låsen og ser den er så slidt at hvis du finder noget spidst kan du måske få den op!\n"+
"tryk V for at gå hen til spejlet\n"+
"tryk S for at gå hen til sengen\n"+
"tryk E for at låse døren op";
if (Input.GetKeyDown (KeyCode.V)) {myState = States.spejl;}
else if (Input.GetKeyDown (KeyCode.S)) {myState = States.seng_0;}
else if (Input.GetKeyDown (KeyCode.E)&& invertory.Contains ("et langt stykke glas")) {myState = States.gang;}
}
void state_spejl()
{
text.text ="Du kigger nu dit spejl billede du har mange sår efter vagterne gav dig bank, spejlet er meget skrøbeligt\n"+
"tryk D for at gå hen til døren\n"+
"tryk S for at gå hen til sengen\n"+
"tryk E for at smadre spejlet";
if(Input.GetKeyDown (KeyCode.D)) {myState = States.dør;}
else if (Input.GetKeyDown (KeyCode.S)) {myState = States.seng_0;}
else if (Input.GetKeyDown (KeyCode.E))
{
if (invertory.Contains("et langt stykke glas"))
{
invi.text = "du har allerede smadret glasset";
invi.enabled = true;
StartCoroutine(Distro());
}
else if (invertory.Count > 0)
{
invertory.Add ("et langt stykke glas");
invi.text = "du har nu fået et langt stykke glas fra spjelet";
invi.enabled =true;
StartCoroutine(Distro());
}
}
}
//få invitar
public void getinvertory()
{
//
if (invertory.Count == 0)
{
invi.text ="Du har ikke noget endnu";
invi.enabled = true;
StartCoroutine (Distro());
}
else if (invertory.Count >= 0)
for(int i = 0; i < invertory.Count;)
{
invi.text = " " + invertory[i];
i ++;
invi.text = " " + invertory[i];
}
invi.enabled = true;
StartCoroutine (Distro());
}
IEnumerator Distro()
{
yield return new WaitForSeconds(5);
invi.enabled= false;
}
}
Comment
Answer by BiG · Jul 31, 2015 at 02:47 PM
Yes, line 126 is the problem. Because you increment i
inside the cycle's body, so - at the last iteration - you will access invertory[i]
while i
is equal to invertory.Count
.
Answer by Dave-Carlile · Jul 31, 2015 at 02:50 PM
for(int i = 0; i < invertory.Count;)
{
invi.text = " " + invertory[i];
i ++;
invi.text = " " + invertory[i];
}
Why are you incrementing i
inside of the for loop? When you get to i = inventory.Count - 1, incrementing i here and then referencing inventory[i] is likely the cause of your error.
A for loop would generally look like this:
for (int i = 0; i < inventory.Count; i++)
{
// do your stuff, don't muck with the value of i
}
Your answer
![](https://koobas.hobune.stream/wayback/20220611233859im_/https://answers.unity.com/themes/thub/images/avi.jpg)