2012-09-15 54 views
0

我有一組存儲在Map/HashMap中的值。然後我做了一個三重循環來比較這些值。值的比較方法如下:首先獲取0-1的值,然後將其與1-x [1-2,1-3,... 1-n]開始的一組值相比較。 IF和ONLY如果(例如0-1)的值大於1-x設定值(例如:1-2,1-3,... 1-n)中的所有其他值,則IF-ELSE聲明將觸發一個事件。無法獲取循環來檢查通過循環傳遞的一組值是否大於某個值

的數據的一個示例在下面的代碼段中給出:

import java.util.HashMap; 
import java.util.Map; 

public class CompareSequence{ 

    public static void main(String[] args) 
    { 
     Map<String, Integer> myMap = new HashMap<String, Integer>(); 
     myMap.put("0-1", 33); 
     myMap.put("0-2", 29); 
     myMap.put("0-3", 14); 
     myMap.put("0-4", 8); 
     myMap.put("1-2", 37); 
     myMap.put("1-3", 45); 
     myMap.put("1-4", 17); 
     myMap.put("2-3", 1); 
     myMap.put("2-4", 16); 
     myMap.put("3-4", 18); 

     for(int i = 0; i < 5; i++) 
     { 
      for(int j = i+1; j < 5; j++) 
      { 
       String testLine = i+"-"+j; 
       int itemA = myMap.get(testLine); 

       for(int k = j+1; k < 5; k++) 
       { 
        String newLine = j+"-"+k; 
        int itemB = myMap.get(newLine); 

        if(itemA > itemB) 
        { 
         //IF and ONLY all values of item A that is passed through is bigger than item B 
         //THEN trigger an event to group item B with A 
         System.out.println("Item A : " + itemA + " is bigger than item " 
         + newLine + " (" +itemB + ")"); // Printing out results to check the loop 
        } 
        else 
        { 
         System.out.println("Comparison failed: Item " + itemA + " is smaller than " + newLine + " (" + itemB + ")"); 
        } 
       } 
      }  
     }     
    } 
} 

Current Result: 
Get main value for comparison: myMap.get(0-1) = 33 

Get all values related to Key 1-x (set value) .. 
myMap.get(1-2) = 37 // This value is bigger than myMap.get(0-1) = 33 
myMap.get(1-3) = 45 // This value is bigger than myMap.get(0-1) = 33 
myMap.get(1-4) = 17 // This value is smaller than myMap.get(0-1) = 33 

在給定的該示例中,IF-ELSE語句不應讓它通過,只有當所有比33小,應該一事件被觸發。我應該對IF-ELSE語句做些不同的事情,或者我的循環有問題嗎?

Desired Result: 

If((myMap.get(0-1) > myMap.get(1-2)) && (myMap.get(0-1) > myMap.get(1-3)) && (myMap.get(0-1) > myMap.get(1-4))...(myMap.get(0-1) > myMap.get(1-n)) 
{ 
    //Trigger event to group all set values 1-x to value key 0-1 
    //Then delete all set valued related to 1-x from list 
} 

任何意見或幫助將不勝感激。謝謝!

+0

建議你需要對你的期望VS您實際看到的更清楚一點。 – John3136

+0

嗨,約翰,我的問題是獲取if-else語句來檢查所需條件部分中顯示的所有條件。由於只有三個值,所以我可以使用這種方法,但是如果有10個以上的數據比較,這是不可能的。 – Cryssie

回答

1

你可以嘗試這樣的事:

for (int i = 0; i < 5; i++) { 
    for (int j = i + 1; j < 5; j++) { 
     String testLine = i + "-" + j; 
     int itemA = myMap.get(testLine); 

     boolean greaterThanAll = true; 

     for (int k = j + 1; k < 5; k++) { 
      String newLine = j + "-" + k; 
      int itemB = myMap.get(newLine); 

      if (itemA <= itemB) { 
       System.out.println("Comparison failed: Item " + itemA + " is smaller than " + newLine + " (" + itemB + ")"); 
       greaterThanAll = false; 
       break; 
      } else { 
       System.out.println("Item A : " + itemA + " is bigger than item " 
         + newLine + " (" + itemB + ")"); // Printing out results to check the loop 
      } 
     } 
     if (greaterThanAll) { 
      System.out.println(testLine + "=" + itemA + " is greater than all"); 
      //IF and ONLY all values of item A that is passed through is bigger than item B 
      //THEN trigger an event to group item B with A 
     } 
    } 
} 
+0

嘿assylias,它接近我所需要的,但它是當下一組值比較時...例如:myMap.get(0-2)= 29> myMap.get(2-3)= 1 && myMap.get (0-2)= 29> myMap.get(2-3)= 16應該是true。除非所有值都大於myMap.get(0-1)= 33,否則它不返回結果。 – Cryssie

+0

我看到以下輸出:'項目A:29大於項目2-3(1)'then'項目A:29大於項目2-4(16)',導致'0-2 = 29大於全部' - 所以對於'0-2',所有的大小都是正確的。不知道你在問什麼... – assylias

+0

我的錯誤assylias。我在for循環之外放置了boolean greaterThanAll = true,這導致了我的錯誤。你的方法完美地工作。這是我最後的LOL的人爲錯誤。謝謝! – Cryssie