2016-04-07 10 views
0

こんにちは私はjavaを初めて使い、arraylistを理解しようとしています。私はArraylist theListdummyValuesを使用しています。私はのリストから値を読み取り、floatの値をdummyValuesに更新しました。 `arraylistのfloat値を確認して追加します

 public static void generateValues(ArrayList<Float> theList) { 

    for (int j = 0; j < theList.size(); j++) { 
     if (dummyValues.size()==0) 
       dummyValues.add(j, theList.get(j)); 

      else 
       dummyValues.set(j, theList.get(j)); 
        }  
} 
を次のように私のコードスニペットはある

私はサイズdummyValuesが0より大きい場合だけの値を更新する最初の条件にArrayListにをdummyValuesを値を追加し、第二の条件にしようdummyValues。私はこの方法を重複コピーを避けるために考えました。

しかし、私はそれを実行したときに、私は次のエラーを取得:

java.lang.IndexOutOfBoundsException:無効なインデックス1は、大きさが1

エラーですが、ここでdummyValues.set(j, theList.get(j));

発生します私はこれが些細な概念であることを知っています、どんな種類の助けもあります。

+2

'dummValues'と' theList'は同じサイズですか?それ以外の場合は、値を無視するか、例外が発生する可能性があります。この特定の場合、 'theList'は' dummyList'よりも大きいようです。 – SomeJavaGuy

+0

'dummyValues'には1つの要素しかありませんが、インデックス1などにsetを呼び出します。インデックス0にしか設定できない要素が1つあるため –

+0

@FastSnailこの情報に感謝します。ここでは、要素を持つインデックスのみを設定できることを理解しています。要素の重複を避ける方法はありますか? – ADI

答えて

2

私はこの改善を示唆しています。両方のリストのサイズのため

public static void generateValues(ArrayList<Float> theList) { 

for (int j = 0; j < theList.size(); j++) { 
    if (dummyValues.size()==0){ 
      dummyValues.add(j, theList.get(j)); 
     } 
     else if(dummyValues.size()==theList.size()){ 
      dummyValues.set(j, theList.get(j)); 
       }  
    else{ 
     dummyValues.add(theList.get(j)); 
    } 
} 

チェックし、リストのサイズが同じでない場合、それはダミーのリストに新しい要素を追加する代わりに、存在しないインデックスに要素を設定しようとします:あなたの方法は、これに変更します。 この場合、リストの順序は同じではありません。

編集:これは正解ではありません!申し訳ありませんが、私は思考よりも速く書いています。 : theList.size() > dummyValues.size()の場合にのみ動作します。私の回答をimprvoveしようとします;)

EDIT2:もう一度こんにちは。 いくつかの仕事と私は戻ってきましたか?私はあなたの方法を改作し、私の意見では、あなたのためのより良い解決策を第二に持っています。これをチェックしてください:

public static void generateValues(List<Float> theList) { 

    if (dummyValues.size() >= theList.size()) { 
    for (float value : theList) { 
     dummyValues.set(theList.indexOf(value), value); 
    } 
    } 
    else { 
    for (float value : theList) { 
     dummyValues.add(dummyValues.size(), value); 
    } 
    } 
} 

あなたのニーズに合っているかどうか試してみてください。

0

dummyListが空です.jが0の場合、のリストに1つの要素が追加されますが、jが1の場合は、のdummyListから1の要素を設定しようとしています。しかし、その時点でのdummyListには、位置0にある要素が1つしかありません。そのため、エラーが発生しています。

一つの解決策は、あなたがtheListのサイズなどの初期容量(またはあなたが好む場合のサイズ)でdummyListを作成することを確実にすることです。

public static void generateValues(ArrayList<Float> theList) { 

for (int j = 0; j < theList.size(); j++) { 
    if (dummyValues.size()==0){ 
      dummyValues = new ArrayList<>(theList.size()); 
      dummyValues.add(j, theList.get(j)); 

     } else 
      dummyValues.set(j, theList.get(j)); 
    }  

}

0

あなたはdummyValuesはそれだけで1つの要素を持っている場合、それはdummyValues.size()==0)に合格するという事実を占めていないが、ArrayListには、0からカウントを開始以来、私たちはインデックス1にいる場合のみ、だから、0のインデックスを持っていますtheListそれはあなたに例外の例外をスローします。

あなたはすべての:)

0
  • は、変数や初期化を確認してくださいだとdummyValues.size()==1)のための別の条件を追加する必要があります。

    dummyValues = new ArrayList<Float>(); 
    
  • その後、コードで何かを行う前に、このチェックを行うことができます -

    public void generateValues(ArrayList<Float> theList) { 
    
    if (theList.size() > 0) { 
        for (int j = 0; j < theList.size(); j++) { 
         if (dummyValues.size() == 0) { 
          dummyValues.add(theList.get(j)); 
         } else { 
          try { 
           if (dummyValues.get(j) != null) { 
            dummyValues.set(j, theList.get(j)); 
           } 
          } catch (IndexOutOfBoundsException e) { 
           //no element present here . 
          } 
         } 
    
        } 
        } 
    
    } 
    

theListがすべてで任意の値を持っている場合、これはチェックします、ループを開始します。 dummyValuesが空の場合は、0番目の要素を追加するか、dummyValuesをtheListの値に置き換えてください。

これを試してみてください、それがあなたに役立つかどうか教えてください。

関連する問題