2012-07-13 38 views
3

我有一個數組:如何獲得數組中的確切元素?

int num[] = {10, 20, 30, 40, 50}; 

我從日曆當前分鐘,並用上述陣列比較得到確切數組元素。

我的代碼如下,經過比較後經常會得到第一個元素,這是不正確的,因爲我的願望,請幫助糾正我。謝謝

public static int getMinute(int no) { 
    int num[] = {10, 20, 30, 40, 50}; 
    for (int i = 0; i < num.length;; i++) { 
     if (no >= num[i]) { 
      no = num[i]; 
      break; 
     } 
    } 
    return no; 
} 
+4

你希望如何工作? – Keppil 2012-07-13 07:06:14

+0

爲什麼不使用'(no/10)* 10'? – 2012-07-13 07:11:01

+0

看起來你想每分鐘收集到最近的第10個,對吧?然而,看起來你並不像處理高於50的數字,即56.這些數字應該如何處理?據說0,對吧? – 2012-07-13 07:11:30

回答

3

這裏有兩個解決方案(在0..59範圍內可同時工作):

  1. 如果陣列是真的0, 10, 20, ..., 50你可能只是這樣做:

    return 10 * (no/10); 
    
  2. 如果您有更多更復雜匹配你可以使用這樣的TreeSet

    TreeSet<Integer> c = new TreeSet<Integer>(Arrays.asList(0, 4, 23, 12, 41)); 
    
    System.out.println(c.lower(5)); // return 4 
    System.out.println(c.lower(54)); // return 41 
    System.out.println(c.lower(32)); // return 23 
    

    請注意,您需要包含一個下限才能使其正常工作,否則TreeSet.lower可能會返回null

+0

你是正確的,只是測試它。謝謝你和所有這些 – Peter 2012-07-13 07:56:26

3

你將不得不改變你的數組的順序工作。嘗試

public static int getMinute(int no) { 
    int num[] = {50, 40, 30, 20, 10, 0}; 
    for (int i = 0; i < num.length; i++) { 
     if (no >= num[i]) { 
      no = num[i]; 
      break; 
     } 
    } 
    return no; 
} 
+0

@AvadaKedavra:是的,更正了。 – Keppil 2012-07-13 07:15:17

2

有沒有在這條線的多餘的分號:

for (int i = 0; i < num.length;; i++) { 

刪除它應該解決這個問題。

+1

沒有那會導致編譯錯誤。他正在得到一個結果? – dacwe 2012-07-13 07:13:09

+0

不,這是我的複製錯誤 – Peter 2012-07-13 07:17:05

+0

多餘的分號僅僅是這裏問題的一部分。 – geby 2012-07-13 09:42:29