2017-10-13 7 views
0

整数値のリストをトラバースしようとしていますが、内部の値は{0,0,0,0,0,0,0、 0,0,3,3,3,3,3,3,3,1,1,1,1,1,1,1 ....}。整数リストをトラバースして連続した値の開始位置と終了位置を保存する方法

リストをトラバースしながら、開始インデックス位置と終了位置と共に値を保存するオブジェクトを作成しています。

たとえば、上記の構造は3つのオブジェクトを引き出します。

第一の目的は、0の開始位置および8

第2のオブジェクトの位置を終了して値0を含んでいるように9の開始位置と15の終了位置とで値3を含有します。私はこれにかなり取り組んできました。私はこれにアプローチする方法に苦労しています。

+0

'class PositionHelper {int start; int end; int val; } '' List'を繰り返し処理してこのインスタンスを作成する –

+1

私は人々の言うことが好きだStack overflowは 'あなたの任務をあなたに任せましょう'というサービスではありません。元のポスターの試行/思考プロセスについて言及されていない問題文。 – digidude

答えて

0

リストをトラバースしながら、開始インデックス位置と終了位置とともに値を保存するオブジェクトを作成しています。

だけでリストを反復し、道に沿って別のリストに新しいオブジェクトを追加します。あなたが何をしたいか

ArrayList<MyObject> newList = new ArrayList<MyObject>(); 

for(Integer i : intList){ 
    int start = ...;  //your calculation to derive start 
    int end = ...;  //your calculation to derive end 
    int value = ...;  //your calculation to derive value 
    newList.add(new MyObject(start, end, value)); 
} 
0

はあなたにあり、新しい値が見たときに値を追跡していますリスト内でオブジェクトを作成し、値を再初期化します。ここでは、あなたの問題に適用することができるはず例である -

int list[] = {0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,1,1,1,1,1,1,1}; 
int currentVal = list[0]; 
int start = 0; 
int end = -1; 

for(int index = 1; index < list.length; index++) 
{ 
    if(currentVal != list[index]) 
    { 
     end = index - 1; 
     System.out.println("New Object is S: " + start + ", End: " + end + ", Val: " + currentVal); 
     // create the object here PositionHelper obj = new PositionHelper(start, index - 1, currentVal); 
     currentVal = list[index]; 
     start = index; 
    } 
} 

System.out.println("New Object is S: " + start + ", End: " + (list.length - 1) + ", Val: " + currentVal); 
// create the object here PositionHelper obj = new PositionHelper(start, index - 1, currentVal); 

出力

New Object is S: 0, End: 8, Val: 0 
    New Object is S: 9, End: 15, Val: 3 
    New Object is S: 16, End: 22, Val: 1 

あなたは、リスト内の非常に最後のオブジェクトを考慮してほしいと、あなたが」勝ちました最後の文がそれを説明するようにforループを終了するまで知りません。 forループの最後の最後をチェックする場合は、別のループを追加することもできます。ディーラーの選択!がんばろう!

0
public class Test { 
    static class MyObject { 
    private int begin; 
    private int end; 
    private int number; 

    public MyObject(int begin, int end, int number) { 
     this.begin = begin; 
     this.end = end; 
     this.number = number; 
    } 

    public String toString() { 
     return "[begin: " + begin + ", end: " + end + ", number: " + number + "]"; 
    } 

    //getters, setters 
    } 

    public static List<MyObject> traverse(int ... integers) { 
    List<MyObject> result = new ArrayList<>(); 
    if(integers.length == 0) { 
     return result; 
    } 
    int number = integers[0]; 
    int begin = 0; 
    for (int i = 1; i < integers.length; i++) { 
     int current = integers[i]; 
     if(current != number) { 
     result.add(new MyObject(begin, i-1, number)); 
     begin = i; 
     number = current; 
     } 
    } 
    result.add(new MyObject(begin, integers.length -1, number)); 
    return result; 
    } 

    public static void main(String[] args) { 
    List<MyObject> result = traverse(0,0,0,1,1,15); 
    System.out.println(result); 
    } 
} 

出力は:
が[開始:0、終了:2、数:0]、[開始:3、終了:4、数:1]、[開始:5、末端:5、番号:15]]

関連する問題