2017-02-15 3 views
0

Wenn ich den Code unten getestet es war gut ausgestattet mit einem Daten-Set läuft, aber wenn ich es mit anderer Datenmenge testen, gab es mir dieses Themasechs Fehlermeldungen „main“ java.lang.ArrayIndexOutOfBoundsException: 2

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 
    at psofc2.FeatureConstruction.classify(FeatureConstruction.java:192) 
    at pofc2.FeatureConstruction.calacc_binary(FeatureConstruction.java:180) 
    at psofc2.FeatureConstruction.getOp(FeatureConstruction.java:97) 
    at psofc2.FeatureConstruction.fitness(FeatureConstruction.java:44) 
    at psofc2.Swarm.iterate(Swarm.java:87) 
    at psofc2.Main.main(Main.java:160) 

Ich habe auf dieser Website nach allen übereinstimmenden Fällen gesucht, aber wirklich fand ich meine Antwort nicht.

+0

Wie sieht dein 'Problem' aus? Wenn Sie 'p_i.getPosition()' und 'getProblem(). Fitness (was auch immer)' aufteilen, macht es außerdem deutlich, von welcher Anweisung Ihre Exception kommt. Wie folgt: 'double temp = p_i.getPosition(); getProblem(). fitness (temp); ' – MikaelF

+0

danke @MikaelF für Ihre Antwort. Das Problem ist nur eine Klasse, die bestimmte Methoden verwendet. für Ihren Vorschlag habe ich sie verschüttet und bekomme immer noch den gleichen Fehler (Liste temp = p_i.getPosition(); double new_fitness = getProblem().Fitness (temp);) – anas

+0

Ja, aber welche Linie wirft die Ausnahme? (Statt Zeile 84) – MikaelF

Antwort

0

Aktualisieren

FeatureConstruction hat einen logischen Fehler beim Klassifizieren. Sie gehen davon aus, dass der Parameter "Training" nicht mehr als 2 Elemente enthält.

public double classify(Dataset training, Dataset testing) { 
     // initial the threshold and two classes 
     Object[] clzz = new Object[training.classes().size()]; // <--- Init the array to the size of training 
     int index = 0; 
     for (Object o : training.classes()) { 
      clzz[index] = o; //<-- Now everything in training has a place to be. 
      index++; 
     } 

Vom stacktrace Sie das Problem ist die Bereitstellung initialisiert auf Linie 87 der Klasse; Die Ausnahme wird jedoch aus Zeile 192 der Klasse FeatureConstruction innerhalb desselben Pakets ausgelöst. Es scheint, als gäbe es eine implizite Abhängigkeit zwischen Particle.getPosition() und Problem.fitness (Position), die nicht erfüllt ist.

Ich würde vermuten, dass ProblemFeatureConstruction erstreckt, und dass die Frage der staatlichen Verwaltung und Erwartungen zwischen dem Problem Implementierung und der übergeordneten Klasse in Beziehung steht.

Ich würde empfehlen, die Variablen in der Aufrufliste bis FeatureConstruction.classify() zu überprüfen. Bestimmen Sie, wie der Status des Problems ist, wie es zu diesem bestimmten Aufruf gehört, und erstellen Sie einen JUnit-Test, um die Bedingung zu replizieren. Dies kann dazu beitragen, das Problem zu isolieren und die Durchführung von Teständerungen zu beschleunigen.

Der Junit-Test hilft beim Verständnis des Zustands der Klassen und ermöglicht möglicherweise, dass Prüfungen durchgeführt werden, um diesen Zustand zu verhindern. Am Ende des Tages erwarte ich, dass mindestens eines von drei Dingen der Übeltäter sein wird:

  1. FeatureConstruction hat ein logisches Problem in der Klassifizierungsfunktion.
  2. Problem (angenommene Erweiterung von FeatureConstruction) berücksichtigt nicht den Status der übergeordneten Klasse und es fehlt eine Art von Initialisierungs- oder Aktualisierungsaufruf, um das übergeordnete Datenmodell synchron zu halten.
  3. Der Prozess, der die Abhängigkeit zwischen dem Problem und dem Partikel steuert, weist in einem Fall einen logischen Fehler auf und das Setup konfiguriert die Datenzuordnung falsch.

Hoffe, dass hilft.

+0

Vielen Dank für diese gute Erklärung @ Jeremiah. Auf jeden Fall helfen mir diese Hinweise, den Fehler nicht nur in diesem Code, sondern in allen meinen Studien zu beheben. – anas

0

Versuchen Sie, p_i.getSize() - 1; für den Schleifenzustand zu verwenden.
Sie scheinen 0,1,2 zu durchlaufen, da die Größe 2 zurückgibt, aber das Array nur 0,1 enthält.

+0

[email protected] Ich habe es versucht und habe immer noch den gleichen Fehler. – anas

+0

nur um zu informieren, dass der Code mit einem Dataset gut läuft und es gab diesen Fehler, wenn ein anderes Dataset verwendet wurde. Keine Ahnung warum? – anas

Verwandte Themen