public class AccumulatedData {
public static void main(String args[]) {
ArrayList<Double> weights = new ArrayList<Double>();
weights.add(145.0);
weights.add(146.5);
weights.add(146.5);
weights.add(147.0);
weights.add(146.0);
weights.add(148.0);
weights.add(148.5);
ArrayList<Double> printWeightChanges = getWeightChanges(weights);
System.out.println(weights);
}
public static ArrayList<Double> getWeightChanges(ArrayList<Double> weights) {
for (int i = 0; i < weights.size() - 1; i++) {
weights.set(i, (weights.get(i + 1) - weights.get(i)));
}
return weights;
}
}
我已经尝试在上面遍历数组列表的所有元素并打印出它们各自的连续差异(取数组列表中的索引之一并减去索引零)然而,我的for循环似乎遍历所有元素打印它们各自的差异然后添加我的初始数组的最后一个数字到我的新数组列表的末尾,包含所有差异。我该如何解决?
公共类PartS {
public static void main(String args[]) {
ArrayList<Double> weights = new ArrayList<Double>();
weights.add(145.0);
weights.add(146.5);
weights.add(146.5);
weights.add(147.0);
weights.add(146.0);
weights.add(148.0);
weights.add(148.5);
ArrayList<Double> printWeightChanges = getWeightChanges(weights);
新尝试:
}
/**
* Part a
*/
public static ArrayList<Double> getWeightChanges(ArrayList<Double> weights) {
ArrayList<Double> weightDifferences = new ArrayList <Double>();
for (int i = 0; i < weights.size() - 1; i++) {
weightDifferences.add(i, weights.get(i + 1) - weights.get(i));
}
System.out.println(weightDifferences);
return weightDifferences;
}
}
这会产生各种错误:
线程“main”中的异常java.lang.IndexOutOfBoundsException:java.base / jdk.internal中java.base / jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)的长度为6的索引超出范围。 java.base / java.util.Objects.checkIndex(Objects.java:)中的java.base / jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)中的util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) 372)在PartB.main(PartB.java:25)的PartB.getWeights(PartB.java:37)的java.base / java.util.ArrayList.get(ArrayList.java:458)
这是因为您定义了循环限制:
for (int i = 0; i < weights.size() - 1; i++)
循环变化的元素少于数组中的元素(i < weights.size() - 1
)。
我建议创建另一个差异列表,如下所示:
public static List<Double> getWeightChanges(ArrayList<Double> weights) {
List<Double> diffs = new ArrayList<>();
for (int i = 0; i < weights.size() - 1; i++) {
diffs.add(weights.get(i + 1) - weights.get(i));
}
return diffs;
}
您尝试输出的内容将与原始列表的长度不同(具体而言,减少一个数据点)。您需要remove()
列表的最后一个元素,或者创建一个新的列表以输出不同的大小。
由于您的原始列表包含7个双打,并且您更改了前6个,因此列表的最后一个元素保持不变。