Java 通过ArrayList排序,代码问题 //查找最小年份 int pastMin=0; int currentMin=ontarioBankInfoInt.get(0); int currentMinIndex=0; int reps=(ontarioBankInfoInt.size()-1)/3; 对于(intx=0;x

Java 通过ArrayList排序,代码问题 //查找最小年份 int pastMin=0; int currentMin=ontarioBankInfoInt.get(0); int currentMinIndex=0; int reps=(ontarioBankInfoInt.size()-1)/3; 对于(intx=0;x,java,list,sorting,Java,List,Sorting,请看这部分: // 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++){

请看这部分:

 // 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
if(ontarioBankInfoInt.get(i)passmin){
currentMin=ontarioBankInfoInt.get(i);
currentMinIndex=i;
pastMin=当前最小值;
}
}
第一次进入内部时,它会将
pastMin
currentMin
设置为相同的值。之后,任何值怎么可能既小于
currentMin
又大于
pastMin


现在还不清楚您想要实现什么,但这就是为什么您只会进入中间部分一次。

您没有重新初始化
currentMin
currentMinIndex
,因此它们将达到最小值,然后它们将永远不会被重新分配

您需要在循环中重新初始化它们

if (ontarioBankInfoInt.get(i)<currentMin){
    if (ontarioBankInfoInt.get(i)>pastMin){
        currentMin = ontarioBankInfoInt.get(i);
        currentMinIndex = i;     
        pastMin = currentMin;
    }
}
for(int x=0;x pastMin){
currentMin=值;
//currentMinIndex=i;
}
}
pastMin=currentMin;//我想你也需要这个。
yearray.add(currentMin);
}

或者,您可以对列表进行排序,然后选择第一批
重复元素。

这是一种快速而残酷的方法,可以获得最低积分列表,每年一次

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);
}
Collections.sort(ontarioBankInfoInt);
List yearray=new ArrayList(ontarioBankInfoInt.subList(0,reps));
您可能希望在排序之前将ontarioBankInfoInt的内容复制到一个新数组中(如果您希望保留原始顺序)

当然,这是假设ontarioBankInfoInt中没有重复值。
三年的
{1,3,2,1,2}
会给你
{1,1,2}
而不是
{1,2,3}

如果不希望重复值,也不希望使用循环(性能不是问题),则可以:

  • 将ontarioBankInfoInt复制到一个集合中(从而删除重复项)
  • 回到列表中
  • 对列表进行排序
  • 获取所需年数的子列表

  • 但是说真的,使用其他答案中描述的循环…:)

    有没有不使用
    集合的特殊原因。排序
    ?这是家庭作业吗?我建议对(inti:ontarioBankInfoInt)
    使用
    。这样,您就可以在循环中使用
    i
    ,而不是
    ontarioBankInfoInt.get(i)
    Collections.sort(ontarioBankInfoInt);
    List<Integer> yearArray = new ArrayList<Integer>(ontarioBankInfoInt.subList(0, reps));