【发布时间】:2014-06-22 15:14:01
【问题描述】:
这是我在即将进行的测试之前的练习,我试图让用户输入一个数字。并且array1 中低于用户编号的所有元素都将被放入一个新的ArrayList 中。 然后我试图只打印该 ArrayList 中的最高数字。如果用户输入小于 array1 中的所有数字,它将返回 -1。 这是我的代码,但是,当我输入 920 时,它仍然返回 -1,我认为在 ArrayList 中查找最高数字的代码有问题。各位大佬能告诉我怎么回事吗?
static Scanner sc = new Scanner(System.in);
static int[] array1 = {900, 885, 989, 1000, 1500, 1243, 999, 915};
public static int blabla(int[] a, int b) {
Integer d = -1;
ArrayList<Integer> al = new ArrayList<Integer>();
for (int i = 0; i < array1.length; i++) { // this is to find all numbers in array1 that is below user's number, and add it to the ArrayList
if (b > array1[i]) {
al.add(array1[i]);
} // if
} // for
outerloop: // and this function below is to find maximum number in ArrayList
for (int g = (al.size()-1); g == 0; g--) {
for (int j = 0; j <=(g-1); j++) {
if (al.get(j) > al.get(g)) {
break;
}
else if(j == (g-1)) {
if (al.get(g) > al.get(j)){
d = al.get(g);
break outerloop;
}
}
} //for^2
} // for
return d;
} // priceisright
【问题讨论】:
-
在你的第一个循环中,你正在循环新创建的 ArrayList 的元素,但是这个新创建的 ArrayList 是空的,所以这个循环甚至不会运行。您的意思是循环遍历传递的 Array 的元素吗?
-
如果你给你的变量和方法一个有意义的名字,并且如果你委托给方法而不是把所有东西放在一个单一的一个中,你会更容易理解你自己的代码。您还应该重新考虑您的算法。为什么需要两个嵌套循环来查找列表中的最大元素?您需要做的就是遍历每个元素并将它们中的每一个与当前最大值进行比较。如果更大,则更改当前最大值的值。另请参阅docs.oracle.com/javase/7/docs/api/java/util/…
-
您可以更有效地找到最大数量(O(n^2) 并不完全有效..)。为什么不首先对其进行排序?
-
@Kon 你是什么意思?新的 ArrayList 是空的,是的,这就是为什么我用 array1 中低于用户编号 (al.add(a1[i])) 的所有数字填充它,还是我错过了什么?
-
@JBNizet 我试图用我的代码做的是,变量 'g' 是 ArrayList 中的最后一个元素,变量 j 是第一个元素,这就是我一个一个比较的方式,我不知道怎么回事