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));