I am getting this error message:
ArrayIndexOutOfBoundsException: 9
I am only using arrayLists to store my objects so I dont get this this error message occurs. It might have to do something with my last function, that creates an objects with random coordinates.
Himmelskoerper is a class that contains a position (PVector), a velocity (PVector), a distance float, a mass float, integers for the colour and a name String. The class Stern contains the exact same instancevariables.
PVector v = new PVector (1,1);
PImage explosion1;
PImage explosion2;
public float oy;
public float ox;
public float scroll_speed;
public float scroll_factor = 1.0;
public int max_random_hk = 10;
float zoom = 1;
public float s_k = 3474200; //Skalierungskonstante
//public float G = 6.67e-11; //Gravitationskonstante
public float G = 5; //Gravitationskonstante
//boolean index = false;
public float dt = 1.0/1000; //Delta Zeit zum Ausrechnen der Ellipsenbahnen der Planeten
//Stern Sonne = new Stern (new PVector(0, 0), new PVector (), new PVector(), 1392700000/s_k, 1.989 * pow (10, 30), 255, 255, 255);
Stern Sonne = new Stern (new PVector(width/2, height/2), new PVector (), 1391000000/s_k, 500000000L, 255, 255, 204, "Sonne");
//Position,Anfangsgeschwindigkeit,Durchmesser,Masse,Farbe ( , , );
Himmelskoerper Merkur = new Himmelskoerper (new PVector(-300, 300), new PVector (1000,1000), 4879400/s_k,10, 155, 168, 90, "Merkur");
Himmelskoerper Venus = new Himmelskoerper (new PVector(400, 400), new PVector (-400,400), 12104000/s_k, 10,204, 102, 0,"Venus");
Himmelskoerper Erde = new Himmelskoerper(new PVector(-500,500), new PVector (-300,-300), 12742000/s_k,10,0,102, 102,"Erde");
Himmelskoerper Mars = new Himmelskoerper (new PVector (600,-600), new PVector (-200,-500), 6779000/s_k,10,216, 80, 46, "Mars" );
Himmelskoerper Jupiter = new Himmelskoerper (new PVector (-700,700), new PVector (-1000,-1000), 139820000/s_k,1000,255, 178, 102, "Jupiter");
Himmelskoerper Saturn = new Himmelskoerper (new PVector (800,800), new PVector (-500,500), 116460000/s_k,10, 215, 210, 169,"Saturn");
Himmelskoerper Uranus = new Himmelskoerper (new PVector (-900,900), new PVector (200,200), 50724000/s_k,10,153, 255, 255,"Uranus");
Himmelskoerper Neptun = new Himmelskoerper (new PVector (1000,-1000), new PVector (-100,1500), 49244000/s_k,10,51, 15, 255,"Neptun");
Himmelskoerper Ganymed = new Himmelskoerper (new PVector (-650,650),new PVector (-10,10),2634100/s_k,10,10,150,10,"Ganymed");
//Position,geupdatete Geschwindigkeit,Anfangsgeschwindigkeit,Distanz zur Sonne, Durchmesser,Masse,Farbe ( , , );
PVector cam_pos = new PVector(0, 0, 0); //Für Kamerabewegungen
//Sonne wird nicht als Himmelskörper gezählt
PVector dist_s; //Distanz zur Sonne
PVector dist_hk; //Distanz zu einem Himmelskörper
ArrayList <Himmelskoerper> planeten = new ArrayList <Himmelskoerper>(); //Array für alle Planeten
ArrayList <Himmelskoerper> himmelskoerper = new ArrayList <Himmelskoerper>(); //Array für alle Himmelskoerper
ArrayList <Himmelskoerper> monde = new ArrayList <Himmelskoerper>(); //Array für alle Monde
ArrayList <Himmelskoerper> random_hkk = new ArrayList<Himmelskoerper>();
ArrayList <Stern> sterne = new ArrayList <Stern>(); //Array für alle Sterne
PVector [] [] kraefte_planeten;
PVector [] kraefte_sonne;
PVector [] kraefte_monde;
PVector [] [] distanzen_hk;
PVector [] distanzen_s;
void setup () {
fullScreen();
frameRate (200);
oy = height/2;
ox = width/2;
planeten.add(Merkur);
planeten.add(Venus);
planeten.add(Erde);
planeten.add(Mars);
planeten.add(Jupiter);
planeten.add(Saturn);
planeten.add(Uranus);
planeten.add(Neptun);
himmelskoerper.add(Merkur);
himmelskoerper.add(Venus);
himmelskoerper.add(Erde);
himmelskoerper.add(Mars);
himmelskoerper.add(Jupiter);
himmelskoerper.add(Saturn);
himmelskoerper.add(Uranus);
himmelskoerper.add(Neptun);
himmelskoerper.add(Ganymed);
monde.add(Ganymed);
sterne.add(Sonne);
explosion1 = loadImage ("explosion.png");
explosion2 = loadImage ("explosion.png");
kraefte_planeten = new PVector [planeten.size()][planeten.size()];
kraefte_sonne = new PVector [himmelskoerper.size()];
kraefte_monde = new PVector [monde.size()]; //!
distanzen_hk = new PVector [himmelskoerper.size()] [himmelskoerper.size()]; //Array für Distanzen aller Himmelskörper untereinenader
distanzen_s = new PVector[himmelskoerper.size()]; //Array für Distanzen aller Himmelskörper zur Sonne
}
void draw () {
pushMatrix();
translate(ox,oy);
background (0);
scale (zoom);
KameraBewegen();
distanz_berechnen_s();
distanz_berechnen_zwischen_hk ();
crashen();
kraefte();
campos();
random_hk();
for ( int i = 0; i< himmelskoerper.size(); i++){
if (himmelskoerper.get(i) == null) continue;
himmelskoerper.get(i).kreieren();
himmelskoerper.get(i).name();
}
for ( int j = 0; j< sterne.size(); j++){
if (sterne.get(j) == null) continue;
sterne.get(j).kreieren(scroll_factor);
sterne.get(j).name();
}
popMatrix();
anweisungen();
}
//:Distanz aller Himmelkörper zur Sonne berechnen, in PVector speichern und den in Array speichern
void distanz_berechnen_s () {
//PVector dist_s = new PVector (Sonne.pos.x-Erde.pos.x,Sonne.pos.y-Erde.pos.y);
for (int j = 0; j < sterne.size(); j++) {
for (int i = 0; i < himmelskoerper.size(); i++) {
if (himmelskoerper.get(i) == null) continue;
if (sterne.get(j) == null) continue;
PVector dist_s = PVector.sub(sterne.get(j).pos,himmelskoerper.get(i).pos);
// dist_s.mag() = constrain(dist_s.mag(),5,10);
distanzen_s[i] = dist_s;
/*if (distanzen_s [i].mag() <= 5) {
for (float k = distanzen_s[i].mag(); k< 5; k = k * 2) {
k = distanzen_s[i].mag() ;
}
}*/
}
}
}
//:Distanz aller Himmelkörper untereinander berechnen, in PVector speichern und den in Array speichern
void distanz_berechnen_zwischen_hk () {
for (int i = 0; i < himmelskoerper.size(); i++) {
for (int j = i + 1; j < himmelskoerper.size(); j++) {
if (himmelskoerper.get(i) == null) continue;
if (himmelskoerper.get(j) == null) continue;
PVector dist_hk = PVector.sub(himmelskoerper.get(i).pos,himmelskoerper.get(j).pos);
distanzen_hk [i] [j] = dist_hk;
}
}
}
void random_hk () {
if (random_hkk.size()<max_random_hk) {
int i =1;
if (mousePressed && (mouseButton == LEFT)) {
float xp = random(-2000,2000);
float yp = random(-2000,2000);
float xv = random(-2000,2000);
float yv = random(-2000,2000);
float d = random(5000000,500000000);
float m = random(10,1000);
int F1 = (int) random(255);
int F2 = (int) random(255);
int F3 = (int) random(255);
//PVector pos = PVector.random2D();
//PVector v = PVector.random2D();
Himmelskoerper random_hk = new Himmelskoerper ( new PVector(xp,yp), new PVector (xv,yv), d/s_k, m,F1, F2, F3,s);
himmelskoerper.add(random_hk);
random_hkk.add(random_hk);
planeten.add(random_hk);
i++;
}
}
else {
if (mousePressed && (mouseButton == LEFT)) {
println ("Maximale Anzahl an random_hk erreicht");
}
}
}