Java 数组值是否大于右侧?

Java 数组值是否大于右侧?,java,Java,我正在创建一个方法,它接受一个ArrayList并返回一个ArrayList,其中的整数大于它们右边的所有值 例如,greaterRight([1,4,2,3,6,1,0])应该输出[6,1] 以下是我到目前为止的情况: public static ArrayList<Integer> greaterRight(ArrayList<Integer> arr) { //values must be larger than ALL of the right int

我正在创建一个方法,它接受一个ArrayList并返回一个ArrayList,其中的整数大于它们右边的所有值

例如,greaterRight([1,4,2,3,6,1,0])应该输出[6,1]

以下是我到目前为止的情况:

    public static ArrayList<Integer> 
greaterRight(ArrayList<Integer> arr)
{
//values must be larger than ALL of the right
int test = 0;

ArrayList<Integer> newArr = new ArrayList<Integer>();
for(int i = 1; i < arr.size()-1; i++){
    if(arr.get(0 + test) > arr.get(i)){
        newArr.add(arr.get(i));
    }
    test++;
}

return newArr;


}
公共静态数组列表
greaterRight(ArrayList arr)
{
//值必须大于所有正确值
int检验=0;
ArrayList newArr=新的ArrayList();
对于(int i=1;iarr.get(i)){
新增(arr.get(i));
}
测试++;
}
返回newArr;
}

我不知道为什么它不能按预期工作。

您需要有两个for循环,如果您正在使用一个,请尝试以下代码:

public static List<Integer> greaterRight(List<Integer> list) {
    List<Integer> returnedList = new ArrayList<>();

    for (int i = 0; i < list.size(); i++) {
        Integer n = list.get(i);
        for (int j = i + 1; j < list.size(); j++) {
            if (n < list.get(j)) {
                //Number failed
                break;
            } else {
                if (j == list.size() - 1) {
                    //last element reached and the number is still bigger than anyone to the right
                    returnedList.add(list.get(j));
                }
            }
        }
    }

    return returnedList;
}
公共静态列表greaterRight(列表列表){
List returnedList=new ArrayList();
对于(int i=0;i
请注意,您的周期从
i=1开始,通过执行
arr.get(i)
将元素包括在结果数组中。这本身就使得算法不正确,因为从未测试过结果中是否包含
arr.get(0)
。在我看来,在这个循环中,你只测试了一个元素和它前面的元素,而不是所有的元素都是正确的

我认为更简单的解决方案是为
周期设置两个嵌套的
。外部循环迭代数组中的每个元素,以检查其是否可能包含在结果中。内部循环实际上检查后面的所有值是否大于(或等于)所检查的值:

public static ArrayList<Integer>greaterRight(ArrayList<Integer> arr){

//values must be larger than ALL of the right
int size = arr.size()
ArrayList<Integer> newArr = new ArrayList<Integer>();

// In each iteration of the outer cycle we check if arr.get(i) must be included
// in the result
for(int i = 0; i < size-1; i++){

    // Helper variable to check if all values are greater
    boolean allGreater = true;

    // Check all values after 
    for(j=i+1; j < (size-1) && allGreater; j++){
        if(arr.get(j) < arr.get(i)) {
            // We found a value after arr.get(i) that is lesser
            // Setting all greater to false will cause the inner cycle
            // to exit and for the element to not be included
            allGreater = false;
        }
    }

    // If the previous cycle ended because all values after arr.get(i)
    // are bigger, add arr.get(i) to the final result
    if(allGreater) {
        newArr.add(arr.get(i));
    }
}

return newArr;


}
publicstaticarraylistgreaterright(arraylistarr){
//值必须大于所有正确值
int size=arr.size()
ArrayList newArr=新的ArrayList();
//在外部循环的每次迭代中,我们检查是否必须包括arr.get(i)
//结果
对于(int i=0;i
您的问题是什么?为什么要获取(0+测试)?对于arr的每个元素i,您需要对照其右侧的阵列其余部分进行检查。所以你需要另一个for循环。