我有2个ArrayLists。第一个包含993个浮点值。我已将这993个浮点值的每12个实例添加到一起,并将它们存储在另一个ArrayList(993/12)中,使第二个ArrayList的大小为83.
以下是第二个ArrayList的片段:
919.2, 927.9, 809.39996, 633.8, 626.8, 871.30005, 774.30005, 898.8, 789.6, 936.3, 765.4, 882.1, 681.1, 661.3, 847.9, 683.9, 985.7, 771.1, 736.6, 713.2001, 774.49994, ...
这些值中的第一个,即919.2
对应于1930年。
第二个,927.9
对应于1931年。
第三个,809.39996
对应于1932年,依此类推......意味着最后的第83个值将对应于2012年。
我的最终目标是在第二个ArrayList中查看这些值并查找最大值,打印其值以及与之对应的年份。 问题是该计划目前无法了解这些相应的年份值。
允许假设:第一个相应的年份值是1930年。
目前我能够成功打印ArrayList中最大的值,这是问题的一半。
要实现这一点,只需对ArrayList进行排序:
System.out.println(depthAdd.get(depthAdd.size() -1));
我缺少的是相应的一年。我怎么能这样做?
以下是一些代码:
public void depthValues() {
ArrayList<Float> rValue = new ArrayList<>();
...
ArrayList<Float> depthAdd = new ArrayList<>();
Iterator<Float> it = rValue.iterator();
final int MAX = 12;
while(it.hasNext()) {
float sum = 0f;
int counter = 1;
while (counter <= MAX && it.hasNext()) {
sum += it.next();
counter++;
}
depthAdd.add(sum);
}
Collections.sort(depthAdd);
System.out.println("Wettest year: //year needs to go here "
+ depthAdd.get(depthAdd.size() -1));
return;
}
答案 0 :(得分:3)
您可以复制原始List
(排序前)。然后再次迭代以确定匹配位置。另一种选择是创建一个自定义类来包含年份和值,并在降雨量上创建自定义Comparator
。第一个可能像
List<Float> depthCopy = new ArrayList<>(depthAdd);
Collections.sort(depthAdd);
Float max = depthAdd.get(depthAdd.size() - 1);
for (int i = 0; i < depthCopy.size(); i++) {
if (depthCopy.get(i).equals(max)) {
System.out.println("Wettest year: " + (1930 + i) + " "
+ depthAdd.get(depthAdd.size() - 1));
}
}
答案 1 :(得分:0)
只需跟踪单独变量中的索引和最大值:
float maxValue;
int maxIndex;
while (it.hasNext()) {
float sum = 0f;
int counter = 1;
while (counter <= MAX && it.hasNext()) {
sum += it.next();
counter++;
}
if (sum > maxValue) {
maxValue = sum;
maxIndex = depthAdd.size(); // The current index
}
depthAdd.add(sum);
}
然后打印值:
System.out.println("The max was " + maxValue + " in " + (1930 + maxIndex));
答案 2 :(得分:0)
如果您需要/想要存储值对,可以使用Map<Integer, Float>
之类的内容,并在排序后直接引用键值对。否则,之前的任何一个答案都应该有效。
答案 3 :(得分:0)
Float max = depthAdd.get(0);
int index = 0;
for (int i = 1; I < r.size(); i++)
if (depthAdd.get(i) > max) {
max = depthAdd.get(i);
index = i;
}
int year = 1930 + index;
max将是最大值;