嗨我想获得数组中最低的3个元素。最低的是指最小值。我不能使用collections.Sort方法,因为我需要知道元素的索引。因此我使用以下代码来获得最低,但我需要知道如何获得最低3。
int minimum = grades[1];
int index = 1;
for(i=1; i<= numberOfStudents; i++){
if (grades[i]<minimum){
minimum = grades[i];
index = i;
}
}
答案 0 :(得分:4)
这是一种非常简单的方法:
public static void main(String[] args) {
int[] myArray = { 5, 8, 12, 9, 50, 11, 4 };
System.out.println(Arrays.toString(myArray));
System.out.println(Arrays.toString(getThreeLowest(myArray)));
}
private static int[] getThreeLowest(int[] array) {
int[] lowestValues = new int[3];
Arrays.fill(lowestValues, Integer.MAX_VALUE);
for(int n : array) {
if(n < lowestValues[2]) {
lowestValues[2] = n;
Arrays.sort(lowestValues);
}
}
return lowestValues;
}
输出:
[5, 8, 12, 9, 50, 11, 4] [4, 5, 8]
对Arrays.sort
的调用只对本地数组进行,而不是对主数组进行。这样做的原因只是为了简化与n
的比较。
答案 1 :(得分:3)
建立你拥有的东西
int[] grades = { 100, 99, 98, 97, 10, 95, 11, 9, 94 };
int numberOfStudents = grades.length;
int minimum = grades[1];
int minimum2 = grades[1];
int minimum3 = grades[1];
int index = 1;
int index2 = 1;
int index3 = 1;
for(int i=1; i< numberOfStudents; i++){
if (grades[i]<minimum3 && grades[i]>=minimum2){
minimum3 = grades[i];
index3 = i;
}
if (grades[i]<minimum2 && grades[i]>=minimum){
//We have a new 2nd lowest - shift previous 2nd lowest up
minimum3 = minimum2;
index3 = index2;
minimum2 = grades[i];
index2 = i;
}
if (grades[i]<minimum){
//We have a new lowest - shift previous lowest up
minimum3 = minimum2;
index3 = index2;
minimum2 = minimum;
index2 = index;
minimum = grades[i];
index = i;
}
}
System.out.println("Smallest is at " + index + " with value of " + minimum);
System.out.println("Next Smallest is at " + index2 + " with value of " + minimum2);
System.out.println("Next Smallest is at " + index3 + " with value of " + minimum3);
答案 2 :(得分:1)
这可能有点'太多',但是我可能会创建一个对象数组,每个对象包含它在原始'grade'数组中的值和索引并对其进行排序? / p>
我能想到的唯一另一种方法是通过数组并手动跟踪3个最低元素及其索引,就像你已经在做的那样......
答案 3 :(得分:0)
取三个变量:最小,第二小和第三小。 以同样的方式找到最小元素,在每个步骤中找到三个最小元素。
您需要检查是否有任何元素小于最小数字,或者它是在最小和最小的第二个之间,还是在第二个最小和第三个最小之间。
由于这可能是作业,任务或作业,我不会在这里写代码。
答案 4 :(得分:0)
我们可以吗
int[] myArray = { 5, 8, 12, 9, 50, 11, 4 };
Arrays.sort(myArray);
System.out.println(myArray[0] +","+ myArray[1] +","+ myArray[2]);