-2

配列リストに[3,10,9,11,10,2,9]と言うと、シーケンス[10,9,11,10]を選択するためのコードを記述する必要があります。

これを行う必要がある方法は、要素から間隔を作成し、次の要素がその間隔内にあるかどうかを確認することです。

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]

4

1 に答える 1

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());
于 2012-05-13T18:30:13.023 に答える