在ArrayList中查找最大数量

时间:2014-06-22 15:14:01

标签: java arrays arraylist

这是我在即将进行的测试之前的练习,我试图让用户输入一个数字。并且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

5 个答案:

答案 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)

您可以使用此

 Collections.max(arrayList);

了解有关阅读Javadoc for Collection.max

的更多信息

答案 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]
  }
}

从我的手机回答这个问题,所以我为不良缩进道歉,但你明白了这一点:)