Frage

Ich weiß, wie man die For-Each-Schleife benutzt, um ein ganzes Array wie SO durchzuführen:

for(int d : arrayname){
    do something

Aber wie verwenden Sie die For-Ech-Schleife, um durch ein Teilarray zu fahren, wie das, das ich versuche, ist, den Foreach nur die Monate Mai bis Oktober durchzuführen, dh [4]-[9 ] Um den Wärmeindex zu berechnen. Hier ist ein Ausschnitt meines Codes, der zeigt, was ich versuche zu tun:

// 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] ist Januar und [11] ist Dezember

War es hilfreich?

Lösung

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

und fürc Mayoktober, das zu tun, was Sie gefragt haben.

Übrigens wird es in diesem Fall bevorzugt, herkömmliche Schleife zu verwenden.

Andere Tipps

Sie verwenden das erweiterte für die Loop, Sie können die reguläre für die Schleife verwenden, um das zu erreichen, was Sie wollen

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

In Ihrem Fall würde es höchstwahrscheinlich so aussehen

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

und dann verwenden sumOfHumidity Wie auch immer Sie für richtig halten.

Weitere Hinweise

  • KeyWestHumid ist eine Variable, als solche sollte sie also Lowercamelcase sein, alsokeyWestHumid, das gleiche für keyWestTemp
  • Die harte Codierung von 4 und 9 ist wahrscheinlich unerwünscht, aber ohne die genaue Programmstruktur zu kennen startMonth und endMonth ist wahrscheinlich wünschenswert, erlaubt numberOfMonths mit den beiden berechnet werden (von denen ich erwarte, dass Sie einen Durchschnitt aus erstellen möchten sumOfHumidity)

Sie können eine Normale für die Schleife verwenden:

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

Sie können das erweiterte für die Schleife nicht verwenden, um ein Array teilweise zu iterieren.
Nach der Java -Sprachspezifikation:

Die erweiterte Aussage entspricht einer Grundaussage des Formulars:

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

Sie können, wie in anderen Antworten vorgeschlagen, entweder ein neues Array (oder eine andere Sammlung) erstellen, die nur die Elemente enthält, die Sie iterieren möchten, oder einen regulären für die Schleife verwenden.

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

Sie könnten versuchen, von Arrays wegzukommen und zu verwenden 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));
}

Offensichtlich können Sie die Unterlisten so einfach wie möglich über die Unterlisten iterieren und sie scheinen auf die zugrunde liegende Liste zu leuchten. dh wenn Sie die ursprüngliche Liste ändern, sieht die Unterliste auch die Änderung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top