java for-partial循环用于部分数组

时间:2013-11-07 16:01:24

标签: java arrays foreach partial

我知道如何使用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]是1月,[11]是12月

6 个答案:

答案 0 :(得分: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的硬编码可能是不可取的,但是在不知道确切的程序结构的情况下,很难比使用变量startMonthendMonth更可能提出建议,允许{{ 1}}使用两者进行计算(我希望您希望从numberOfMonths创建平均值)

答案 1 :(得分:4)

double[] mayOctober = Arrays.copyOfRange(KeyWestHumid, 4, 9);

和foreach可能会在10月份做你所要求的。

顺便说一句,在这种情况下,最好使用传统的循环。

答案 2 :(得分:3)

您可以使用普通for循环:

for(int month=4; month<=9; month++){
 KeyWestHumid[month].something();
}

答案 3 :(得分: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循环。

答案 4 :(得分: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);
});

答案 5 :(得分:0)

您可以尝试远离数组并使用List s。

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));
}

显然,您可以像打印它们一样轻松地遍历子列表,并将它们发送到基础列表。即如果您更改原始列表,则子列表也会看到更改。