2017-02-15 3 views
0

私はそれが1セットとよく走っていたが、私は別のデータセットでそれをテストするとき、それは私にこのスレッド6つのエラーメッセージ「メイン」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) 

を与えた以下のコードをテストしたときこのウェブサイトですべての一致したケースを検索しましたが、本当に私の答えは見つかりませんでした。

+0

あなたの「問題」の外観はどうですか?また、 'p_i.getPosition()'と 'getProblem()。fitness(whatever)'を分割すると、あなたの例外がどの命令から来ているのかが明白になります。同様に 'double temp = p_i.getPosition(); getProblem()。fitness(temp); ' – MikaelF

+0

yr replyに@MikaelFに感謝します。問題は、いくつかのセットとメソッドを持つ単なるクラスです。 yr提案のために私はそれらをこぼして、このような同じエラーが表示されます(List temp = p_i.getPosition(); double new_fitness = getProblem()。フィットネス(temp);) – anas

+0

はい、どのラインが例外をスローしますか? (84行の代わりに) – MikaelF

答えて

0

更新

FeatureConstructionには分類に論理エラーがあります。パラメータ 'training'に2つ以上の要素がないと仮定しています。あなたは問題を提供しているスタックトレースから

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++; 
     } 

は、あなたのクラスのライン87に初期化します。ただし、同じパッケージ内のクラスFeatureConstructionの192行目から例外がスローされています。満足していないParticle.getPosition()とProblem.fitness(position)の間に暗黙の依存関係があるようです。

私は問題FeatureConstructionを拡張し、問題が状態管理や問題の実装と親クラスとの期待に関連していることよね。

コールスタック内の変数をFeatureConstrction.classify()に検査することをお勧めします。 の問題がその特定の呼び出しに関係するものであることを確認し、条件を複製するJUnitテストを構築します。これにより、問題を特定し、テストの修正を迅速に行うことができます。

Junitテストは、クラスの状態を理解するのに役立ち、場合によってはその状態を防ぐためにチェックを入れることを可能にします。一日の終わりには、少なくとも3つのうちの1つが原因となることが予想されます。

  1. FeatureConstructionには分類機能に論理的な問題があります。
  2. 問題(FeatureConstructionの拡張を想定)は、親クラスの状態を考慮しておらず、親データモデルを同期させておくための何らかの初期化または更新呼び出しがありません。
  3. ProblemとParticleの間の依存関係を制御するプロセスは、ロジックエラーがあり、セットアップがデータの関連付けを誤って構成しています。

希望があれば。

+0

このような良い説明@エレミアにはありがとうございます。確かにこれらのヒントは、このコードではなく、すべての私の研究でエラーを修正するのに役立ちます。 – anas

0

ループ条件としてp_i.getSize() - 1;を試してみてください。
サイズは2を返しますが、配列には0,1のみが含まれるため、0,1,2をループしているようです。

+0

私はそれを試みたが、同じエラーがまだあります。 – anas

+0

は、コードがデータセットで正常に実行されていることを通知するだけで、別のデータセットを使用するとこのエラーが発生しました。何故かはわからない? – anas

関連する問題