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.
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
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.
KeyWestHumid
ist eine Variable, als solche sollte sie also Lowercamelcase sein, alsokeyWestHumid
, das gleiche für keyWestTemp
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 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));
}
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.