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

3 回答 3

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;
}
于 2012-07-13T07:10:10.087 回答
2

此行中有一个多余的分号:

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

删除它应该可以解决问题。

于 2012-07-13T07:11:46.587 回答
2

以下是两种解决方案(均在该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.

于 2012-07-13T07:22:15.490 回答