Es ist schwer, den Code theoretisch nachzuvollziehen. Ein Beispiel, das ich direkt kompilieren kann (oder können sollte), fände ich schöner, dann könnte ich schneller helfen.
Hier ist mein Versuch, Deinen Code in "normale Sprache" zu übersetzen, d. h. ich versuche wiederzugeben, was meiner Meinung nach in Deinem Code passiert. Vergleiche das mit dem, was Du eigentlich beabsichtigt hast, und schaudere (neee, kleiner Scherz...).
Also, wenn "spiel" wahr ist, deklariere ein array mit 3 Elementen (100, -100, -200) und nenne es yPosition. Deklariere ein array mit einem Element (eine Zufallszahl zwischen 1 und 700) und nenne es xPosition (wieso dann ein array? hm...). Deklariere ein array mit einem Element (eine Zufallszahl zwischen 1 und 5) und nenne es Objektart.
Durchlaufe eine Schleife mit der Schleifenvariable Objektnummer, die bei 0 beginnt, bei der abgefragt wird, ob sie kleiner als 2 (die Länge des arrays yPosition) ist, und die bei jedem Durchlauf um 1 inkrementiert wird.
Wenn Objektart[Objektnummer] - halt! Das geht nicht. Objektnummer kann nur 0 sein, denn sobald diese Variable 1 ist, wird auf Objekart[1] zugegriffen. Das gibt es aber nicht. Objektart - siehe oben - ist ein array mit der Länge 1, d. h. es hat nur das Element Objektart[0].
Mit quietschenden Reifen hält hier die Übersetzungspolizei an und zeigt die große, rote, blinkende Kelle.
Nebenbei gesagt: Es gibt eine Konvention, wonach Felder/Variablen und Methoden mit kleinen Buchstaben anfangen sollen (objektNummer oder objektnummer, aber nicht Objektnummer). Klassen fangen mit Großbuchstaben an, Konstanten (bzw. final deklarierte Felder/Variablen) werden oft komplett großgeschrieben. Das habe ich mir als Java-Neuling auch angewöhnt, und es hilft tatsächlich. Vor allem, wenn man den Code erst nach einigen Tagen wieder ankuckt und sich fragt, was man da eigentlich gemeint hatte...