0


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");
      }
}
  }
prosoitos
  • 4,676
  • 5
  • 19
  • 35
  • 2
    "*Im only using arrayLists to store my objects*" - "*`PVector [] [] kraefte_planeten;`*" – Turing85 Jan 06 '20 at 19:39
  • Thats not an object, thats a PVector – zdharth Jan 06 '20 at 19:48
  • 1
    No, it is an array. And as per [JLS, §4.3.1](https://docs.oracle.com/javase/specs/jls/se13/html/jls-4.html#jls-4.3.1) "*An object is a class instance or an array.*". – Turing85 Jan 06 '20 at 19:50
  • Yes, but im storing a PVector in that array, not an Object – zdharth Jan 06 '20 at 19:52
  • 2
    There are only primitives and objects in java. There are exactly eight primitives (`boolean`, `byte`, `char`, `short`, `int`, `long`, `float`, `double`). `PVector` is not a primitive. Therefore, `PVector` is a class, and its instances are objects. – Turing85 Jan 06 '20 at 19:54
  • Btw, the error only occurs when i activate the last function – zdharth Jan 06 '20 at 19:57
  • oh, but that doesnt fix my problem, does it? – zdharth Jan 06 '20 at 19:58
  • 2
    No. But taking care of the `ArrayIndexOutOfBoundsException` does. – Turing85 Jan 06 '20 at 19:59
  • I know, but im not sure where the mistake lies – zdharth Jan 06 '20 at 20:01
  • 2
    Please read: [How to debug small programs](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – Turing85 Jan 06 '20 at 20:02
  • lol, thanks, just found my error – zdharth Jan 06 '20 at 20:06
  • i have to initialize those arrays you mentioned in void draw – zdharth Jan 06 '20 at 20:07
  • @zdharth You may post your answer (to your own question) if you found something. Here specifically it probably won't change much, but think about the last time where you googled a problem and the last comment was "nevermind I figured it out" and you were left without an answer... and don't be that guy. – laancelot Jan 06 '20 at 20:15
  • That's not a good suggestion, IMO. While it is allowed to post a self-answer, in this case it is unlikely to be a useful thing to do. (Do you imagine that your answer would be useful to someone else? More useful than reading the dup link and its answers? Would >you< take the time to read it? Honestly?) Either way, you can't post an answer anymore because this question has been dup-closed. – Stephen C Jan 07 '20 at 04:17

0 Answers0