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

最佳答案

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

07-24 13:37