2012-05-13 12 views
-2

arraylistに[3,10,9,11,10,2,9]と言うと、シーケンス[10,9,11,10]を選ぶコードを書く必要があります。arraylistからの要素のピックアップ

これを行う方法は、要素から間隔を作成し、次の要素がその間隔にあるかどうかをチェックすることです。

FX:我々は間隔を得る要素3から

、* 0,80 3,3 * 1,20 = [2.4から3.6]。次に、次の要素、10がその区間にあるかどうかを確認します。次の要素、10に移動します。

から10までは[8-12]です。私たちは9,11と10がその間隔にあることを見て、2はそれほど止まらない!

は私が持っているもの:

import java.util.ArrayList; 
import java.util.List; 


public class HelloWorld { 

public static void main (String[] args){ 
    List<Integer> tops = new ArrayList<Integer>(); 
    tops.add(3); 
    tops.add(10); 
    tops.add(9); 
    tops.add(11); 
    tops.add(10); 
    tops.add(2); 
    tops.add(9); 


    List<Integer> newtops = new ArrayList<Integer>(); 
    for (int i = 1; i < tops.size()-1; i++){ 
     double minValue = tops.get(i)*0.80; 
     double maxValue = tops.get(i)*1.20; 
     for (int k = i+1; k < tops.size()-1; k++){ 
      if (tops.get(i) > minValue && tops.get(i) < maxValue){ 
       newtops.add(tops.get(i)); 
      } 
      else{ 
       break; 
      } 
     } 
    }System.out.println(newtops); 
} 
} 

出力: [10、10、10、10、9、9、9、11、11、10]

予想される出力: [10、 9、11、10]

+0

何をしましたか?あなたが問題を抱えている場合は、私たちはあなたを助けてくれるでしょう! –

+0

私はいくつかのイニシアチブを表示する必要があります...あなたがしようとしたコードを共有し、私たちはそれを助けます.. – WickeD

+0

それは私がhavent試して、私はhaventだけまだ価値があると出てくるが、何か: – SoronSR

答えて

0

これはうまくいくと思います。未テスト...

List<Integer> list = new ArrayList<Integer>(); 
list.add(3); 
list.add(10); 
list.add(9); 
list.add(11); 
list.add(10); 
list.add(2); 
list.add(9); 

List<Integer> result = new ArrayList<Integer>(); 
double lowerFactor = 0.8d; 
double upperFactor = 1.2d; 

double lowerLimit = list.get(0) * lowerFactor; 
double upperLimit = list.get(0) * upperFactor; 
int index = 1; 
do 
{ 
    if (lowerLimit <= list.get(index) && list.get(index) <= upperLimit) 
    { 
     if (result.isEmpty()) 
     { 
      result.add(list.get(index - 1)); 
     } 
     result.add(list.get(index)); 
    } else if (result.size() > 0) 
    { 
     break; 
    } else 
    { 
     lowerLimit = lowerFactor * list.get(index); 
     upperLimit = upperFactor * list.get(index); 
    } 
    index++; 
} while (index < list.size()); 
+0

うんうん、それは最初の10を取ることを除いて、働いているようだ。 – SoronSR

+0

@SoronSR:コードを更新した:D –

+0

うーん、今はあなたが言うarraylist [20,9,2,10,11,9 、10,3](前回から逆転したもの+ 20)と同じ出力が欲しいですか? – SoronSR

関連する問題