这是我在即将进行的测试之前的练习,我试图让用户输入一个数字。并且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
答案 0 :(得分:4)
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>();
此时,a1是一个空数组,所以a1.length = 0,这个循环永远不会被执行。
for (int i = 0; i < a1.length; i++) {
// this is to find all numbers in array1 that is below user's number,
// and add it to the ArrayList
if (b > a1[i]) {
al.add(a1[i]);
} // if
} // for
a1在那里仍然是空的,第二个循环也不会做任何事情。
// and this function below is to find maximum number in ArrayList
outerloop:
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
这个怎么样:
// Finds the greater value in values that is below maximum.
// Returns -1 if none is found.
public static int blabla(int[] values, int maximum) {
int best_value = -1;
for (int value : values) {
if (value < maximum && value > best_value) {
best_value = value;
}
}
return best_value;
}
如果您的值在ArrayList中,则可以将int[] values
替换为List<Integer> values
。
答案 1 :(得分:3)
答案 2 :(得分:1)
如果您想使用ArrayList
,可以使用线性时间检查最大值,
public static Integer getMaximum(List<Integer> coll) {
if (coll == null) {
return null;
}
Integer i = coll.get(0);
for (int t = 1; t < coll.size(); t++) {
Integer v = coll.get(i);
if (v != null && v > i) {
i = v;
}
}
return i;
}
或者,您可以将其更改为SortedSet<Integer> set = new TreeSet<Integer>();
,然后最大元素始终为set.last();
答案 3 :(得分:1)
我会通过这个简化你的两个for循环:
for (int g = 0; g <=(al.size()-1); g++) { //for each value in your new array
d = (al.get(g)>d)? al.get(g):d; //is current value higher than previous? if not keep old one
}
答案 4 :(得分:1)
在不使用内置方法(如.max
)的情况下,在数组或arrayList(或实际任何集合)中查找max的简单方法Int currentMax = 0
For (int i = 0; i < al.length; i++)
{
If al[i] > currentMax
{
CurrentMax = al[i]
}
}
从我的手机回答这个问题,所以我为不良缩进道歉,但你明白了这一点:)