从数组中获取范围

时间:2017-05-15 11:16:05

标签: java arrays

我有一个排序的整数数组:

int[] arr = {13,18,22,29,44,59,77,81,87,99};

我想创建一个方法,我可以指定两个整数作为范围未包含在数组中,并检索该范围内的所有值。比如,20到80.这两个值不在数组中。到目前为止,我已经尝试了这个,只有在 arr 中存在两个值时才有效:

public ArrayList<int> find(num1, num2){
    ArrayList<int> values = new ArrayList<int>();
    int firstIndex = 0;
    int secondIndex = 0;

    for(int i=0; i<arr.length; i++){

        if(num1 == arr[i]){

            firstIndex = i;

        }

        if(num2 == arr[i]){

            secondIndex = i;

        }

    }

    while(firstIndex <= secondIndex){

        values.add(arr[firstIndex]);
        firstIndex++;

    }
    return values;
}

先谢谢你......我坚持了一段时间!

2 个答案:

答案 0 :(得分:-1)

这是一个解决方案:

private static int[] valuesBetween(int min, int max) {
    int start = 0;
    while (start < arr.length && arr[start] < min) start++;
    int end = start;
    while (end < arr.length && arr[end] <= max) end++;
    return Arrays.copyOfRange(arr, start, end);
}

您可以将其应用于空数组,如果max小于min,它也可以正常工作。

答案 1 :(得分:-2)

遍历您的阵列并检查该数字是否在给定范围内(例如,最小数字为9,最大数字为30)。将它添加到新创建的数组中,然后在完成后返回数组。我很快就会提供代码片段。

public ArrayList<Integer> withinRange(int min, int max, int[]array){
    ArrayList<Integer> list = new ArrayList<>();

    for(int i : array){
        if(i>=min && i<=max){
            list.add(i);
        }
    }
    return list;
}

这将包括答案中的最小值和最大值。