// Find smallest year
int pastMin=0;
int currentMin=ontarioBankInfoInt.get(0);
int currentMinIndex=0;
int reps=(ontarioBankInfoInt.size()-1)/3;
for(int x=0; x<=reps; x++){
for (int i=0; i<ontarioBankInfoInt.size()-1; i++){
if (ontarioBankInfoInt.get(i)<currentMin){
if (ontarioBankInfoInt.get(i)>pastMin){
currentMin = ontarioBankInfoInt.get(i);
currentMinIndex = i;
pastMin = currentMin;
}//If End
}//If End
}//For End
//Add other information
yearArray.add(currentMin);
}//For End
注意:reps是需要查找的年数。 这段代码的目的是搜索一个最小年份的arrayList然后将它添加到“yearArray”然后它找到下一个最小的add将它添加到say阵列,冲洗并重复直到它在整个数组中工作。
我的问题是它总是在同一年返回,我不知道为什么有任何帮助?
由于
答案 0 :(得分:2)
您没有重新初始化currentMin
和currentMinIndex
,因此这些值会达到最小值,然后就不会重新分配。
您需要在循环内重新初始化它们。
for(int x=0; x<=reps; x++){
int currentMin = Integer.MAX_VALUE; // Do this here.
//int currentMinIndex = -1; // This is never used??
for (int i=0; i < ontarioBankInfoInt.size() - 1; i++) {
int value = ontarioBankInfoInt.get(i);
if (value < currentMin && value > pastMin) {
currentMin = value;
//currentMinIndex = i;
}
}
pastMin = currentMin; // I also think you want this here.
yearArray.add(currentMin);
}
或者您可以对列表进行排序并获取第一个reps
元素。
答案 1 :(得分:0)
看看这部分:
if (ontarioBankInfoInt.get(i)<currentMin){
if (ontarioBankInfoInt.get(i)>pastMin){
currentMin = ontarioBankInfoInt.get(i);
currentMinIndex = i;
pastMin = currentMin;
}
}
第一次进入内部时,它会将pastMin
和currentMin
设置为相同的值。在此之后,任何值都
你想要实现的目标并不是很清楚,但这就是为什么你只会进入中间部分。
答案 2 :(得分:0)
这是一种快速而残酷的方法,可以获得每年最低一次的最低排名列表。
Collections.sort(ontarioBankInfoInt);
List<Integer> yearArray = new ArrayList<Integer>(ontarioBankInfoInt.subList(0, reps));
您可能希望在排序之前将ontarioBankInfoInt的内容复制到新数组中(如果您想保留原始订单)。
这当然假设ontarioBankInfoInt中没有重复值。
{3}年{ 1,3,2,1,2 }
会给您{ 1,1,2 }
而不是{ 1,2,3 }
如果您不想要重复值,并且您不想使用循环(并且性能不是问题),那么您可以:
但严重的是,使用其他答案中描述的循环......:)