2012-07-13 39 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