2016-04-07 6 views
2

私は答えをhereと見ましたが、私はそれが私の問題に答えるかどうかわかりません。だから私は数の束を含むフロート型のarraylistを持っています。私は以前の値よりも30倍以上の数字をすべて削除したいと思っています。したがって、私は'n''n+1'を比較し、'n+1'if (n+1)>(30+n)を取り除いています。逆もまた同様です。私は次のコードを書いたが、私の解決策は機能していない。条件に基づいてarraylistから値を選択的に削除するにはどうすればよいですか?

for(int i = 0; i<hr_list.size()-1; i++) 
    { 
     Float x= hr_list.get(i); 
     Float y = hr_list.get(i+1); 

     if(y>(x+30.0f)||y<(x+30.0f)) 
     { 
      hr_list.remove(i+1); 
     } 
    } 
+1

以下のコードを見てくださいif(y>(x + 30.0f)|| y <(x-30.0f)) 'となる。リストが10 50 90ならあなたがしたいことははっきりしませんが、50だけを削除しますか、90を削除する必要がありますか? – Eran

+0

心拍数を保存していて、HR(n + 1)が30 + HRの場合は、おそらく正しい値ではないため、HRを削除しています。あなたの例では、ベースラインが10であるので、例えば50と90が削除されます。 –

+0

その場合、@Eranの助言に従いますが、 'if'文の中で' i - 'を実行します(' remove ) ')を使用して、次の要素を削除します。 – Andreas

答えて

1

はあなたのコメントに基づいて、私はこのような何かをしたい:もちろん

for(int i = 0; i<hr_list.size()-1; i++) 
{ 
    Float x= hr_list.get(i); 
    Float y = hr_list.get(i+1); 

    if(y>(x+30.0f)||y<(x-30.0f)) 
    { 
     hr_list.remove(i+1); 
     i--; // you want to compare the current i'th element against the 
      // new (i+1)'th element in the next iteration 
    } 
} 

、ベースライン(最初の要素)自体が間違っている場合、これは失敗します。たとえば、20 70 76 79 89 70を含むリストがある場合、このループでは20だけが残されますが、これは正常な動作のようには見えません。おそらく平均を計算し、平均から遠い要素を削除する必要があります。

+0

ありがとう、これは働いた! =) –

0

現在反復中のリストを変更することはできません(まったく意味があります)。

適切なアプローチは、あなただけあなたが初期状態(再帰的な停止条件に合致する最終的なリストを持っているために、再帰呼び出しをしたいかもしれません条件に

public List<Integer> filterList(List<Integer> list) { 
    List<Integer> result = new ArrayList<Integer>(); 
    if (list.size() == 0) return l; 
    int current = l.get(0); 
    boolean filtered = false; 
    for (int v : l) { 
     if (Math.abs(v - current) < 30) { 
      result.add(v); 
     } else {     // 
      filtered = true;  // 
     } 
     current = v;   // 
    } 
    if (filtered) return result; 
    else return l; 
} 

に一致する値を保持するリストを構築することです:myList.equals(filterList(はmyList))、または単にコードサンプル

0

に '//' で終わる行を削除するには、おそらく、あなたは `意味

for(int i=1;i<list.size();i++){ 
    float c=list.get(i); 
    float p=list.get(i-1); 
    if((Math.abs(c-p)>30) 
     list.remove(i); 
} 
関連する問題