1

我知道如何使用 for-each 循环遍历整个数组,如下所示:

for(int d : arrayname){
    do something

但是你如何使用 for-each 循环循环通过部分数组,就像我正在尝试做的那样是使用 for-each 循环仅通过 5 月至 10 月的几个月,即 [4] - [9 ] 计算热指数。这是我的代码片段,显示了我正在尝试做的事情:

// create array for KeyWestTemp
    double[] KeyWestTemp;
    KeyWestTemp = new double[12];

    // initialize array
    KeyWestTemp[0] = 70.3;
    KeyWestTemp[1] = 70.8;
    KeyWestTemp[2] = 73.8;
    KeyWestTemp[3] = 77.0;
    KeyWestTemp[4] = 80.7;
    KeyWestTemp[5] = 83.4;
    KeyWestTemp[6] = 84.5;
    KeyWestTemp[7] = 84.4;
    KeyWestTemp[8] = 83.4;
    KeyWestTemp[9] = 80.2;
    KeyWestTemp[10] = 76.3;
    KeyWestTemp[11] = 72.0;

    // create array for KeyWestHumid
    int[] KeyWestHumid;
    KeyWestHumid = new int[12];

    // initialize array
    KeyWestHumid[0] = 69;
    KeyWestHumid[1] = 67;
    KeyWestHumid[2] = 66;
    KeyWestHumid[3] = 64;
    KeyWestHumid[4] = 66;
    KeyWestHumid[5] = 69;
    KeyWestHumid[6] = 67;
    KeyWestHumid[7] = 67;
    KeyWestHumid[8] = 70;
    KeyWestHumid[9] = 69;
    KeyWestHumid[10] = 69;
    KeyWestHumid[11] = 70;

    // for-each loop for calculating heat index of May - October

[0] 是一月,[11] 是十二月

4

6 回答 6

5

您正在使用增强的 for 循环,您可以使用常规 for 循环来实现您想要的

for(int i=START; i<=END;i++){
     //do work
}

在你的情况下,它很可能看起来像

int sumOfHumidity=0
for(int month i=4; i<=9;i++){
     sumOfHumidity+=KeyWestHumid[month]
}

然后使用sumOfHumidity你认为合适的方法。

其他注意事项

  • KeyWestHumid是一个变量,因此它应该是 lowerCamelCase,所以 keyWestHumid,对于keyWestTemp
  • 4 和 9 的硬编码可能是不可取的,但在不知道确切的程序结构的情况下,除了说使用变量之外很难给出进一步的建议startMonth,并且endMonth可能是可取的,允许numberOfMonths使用两者进行计算(我希望你会想要从sumOfHumidity)创建一个平均值
于 2013-11-07T16:04:03.847 回答
5
double[] mayOctober = Arrays.copyOfRange(KeyWestHumid, 4, 9);

并 foreach mayOctober 做你所要求的。

顺便说一句,在这种情况下,最好使用常规循环。

于 2013-11-07T16:04:10.593 回答
3

您可以使用普通的 for 循环:

for(int month=4; month<=9; month++){
 KeyWestHumid[month].something();
}
于 2013-11-07T16:04:38.150 回答
1

在 Java 8 中:

double[] array = {1, 6, 7, 3, 3, 1, 2, 8, 9, 7, 3};

Arrays.stream(array, 3, 6).forEach((d) -> {
    System.out.println(d);
});

OR

IntStream.range(3, 6).mapToDouble(i -> array[i]).forEach(d -> {
    System.out.println(d);
});
于 2013-11-07T16:50:42.010 回答
1

您不能使用增强的 for 循环来部分迭代数组。
根据 Java 语言规范:

增强的 for 语句等效于以下形式的基本 for 语句:

T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
    VariableModifiersopt TargetType Identifier = #a[#i];
    Statement
}

正如其他答案中所建议的那样,您可以创建一个仅包含您要迭代的元素的新数组(或任何其他集合),也可以使用常规的 for 循环。

于 2013-11-07T16:20:23.387 回答
0

您可以尝试远离数组并使用Lists.

public void test() {
  List<Double> keyWestTemp = new ArrayList(Arrays.asList(70.3, 70.8, 73.8, 77.0, 80.7, 83.4, 84.5, 84.4, 83.4, 80.2, 76.3, 72.0));
  System.out.println("Key West Temps: "+keyWestTemp);
  System.out.println("Apr-Jun Temps: "+keyWestTemp.subList(3, 6));
  keyWestTemp.set(4, 81.6);
  System.out.println("Apr-Jun Temps: "+keyWestTemp.subList(3, 6));
}

显然,您可以像打印子列表一样轻松地遍历子列表,并且它们会传递到底层列表。即,如果您更改原始列表,子列表也会看到更改。

于 2013-11-07T17:00:41.040 回答