0

別のフォーラムで同じ質問をしましたが、適切な回答が得られなかったので、ここに投稿します。次のプログラムがあります。

    public void execute(){  

      public static ArrayList<Long> time = new ArrayList<Long>();  
      public static ArrayList<Integer> state = new ArrayList<Integer>();  
      public static ArrayList<Integer> cpu = new ArrayList<Integer>();  

     for(int i=0; i<time.size(); i++){  

        if(cpu.get(i).equals(get)){  

        Long next_time = time.get(i);  
        Integer next_func = state.get(i);  
        Integer next_proc = cpu.get(i);  

            if(next_time.equals(g) && (next_func.equals(test1.func_num))){  



                Integer func_next = stt.get(i+1);  

                if(func_next.equals(0)||(func_next.equals(next_func))) {  
                    System.out.println("here");  
                }  

                else   
                    System.out.println("here");  
                    if(cpu.get(i+2).equals(get))  
                        if(stt.get(i+2).equals(func_next) || (stt.get(i+2).equals(0)))    
                            System.out.println(stt.get(i+2));  

            }  
    }  

    }  

私がやりたいことはこれです: ユーザーから時間、CPU、状態の値を取得します。対応する値の配列リストで一致を見つけてから、「cpu」に一致する値のみの配列リストをループしたい。すべての ArrayList は同じサイズであり、特定のインデックスで互いに対応する値が含まれています。これどうやってするの?

例: ArrayLists には、次のようなさまざまな値が含まれます。

time = 1 cpu = 12 state = 24
time = 2 cpu = 12 state = 4
time = 5 cpu = 13 state = 23
time = 6 cpu = 13 state = 26
time = 8 cpu = 11 state = 34
time = 11 cpu = 12 state = 54
time = 13 cpu = 12 state = 56
time = 14 cpu = 11 state = 58
time = 15 cpu = 15 state = 46

これが状況です。そして、time=2 cpu=12 state =4 としてユーザーから値を取得します..一致を見つけた後、cpu=12 のみに対応するすべての値を探したい..

4

4 に答える 4

0

このようなものが動作するはずです:

bool matchFound = false;
for (int i = 0; i < time.size(); i++) {
    long thisTime = time.get(i);  
    int thisState = state.get(i);  
    int thisCpu = cpu.get(i);

    if (matchFound) {
        if (thisCpu == userCpu) {
            System.out.println("Time: " + thisTime + " "
                             + "State: " + thisState + " "
                             + "Cpu: " + thisCpu);
        }
    } else {
        matchFound = (thisTime == userTime 
                   && thisState == userState
                   && thisCpu == userCpu);
    }
}
于 2013-06-25T08:25:58.753 に答える
0

一致するものが見つかったら、次のようにします。

//once you have the index in a Integer var called myVal
Set<Integer> indexes = new HashSet<Integer>();
for(int i=0; i<time.size(); i++){
   if (cpu.get(i) == myVal) {
      indexes.add(i);
   }
}

これで一連のインデックスを使用できます。

for (Integer index: indexes) {
   //do whatever
}

これは O(time.size()) です。お役に立てれば

于 2013-06-25T08:28:41.900 に答える
0

Java は純粋な oo 言語です。それは、オブジェクト指向スタイルで書くだけでなく、現実世界のようにすべてをオブジェクトとして考えなければならないことを意味します。この問題を解決する方法を見つける前に、Java の OOP と接続フレームワークを注意深く読むことをお勧めします。

于 2013-06-25T08:03:48.760 に答える