2012-05-13 84 views
-2

給一個arraylist說[3,10,9,11,10,2,9],我需要編寫一些代碼來挑選序列[10,9,11,10]。從arraylist中挑選元素

這樣做的方法是通過從元素中創建一個區間,然後檢查下一個元素是否在該區間中。

FX:

從元件3,我們得到的時間間隔,3 * 0,80和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

它不是我沒有試過,我只是沒有拿出一些值得展示的東西,但我會盡量給你東西:) – 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