无法在数组

时间:2015-10-08 21:23:16

标签: java arrays algorithm

我正在编写一种用于在数组中打印增加序列的算法,但我当前的解决方案不会仅打印最后一个序列。这是因为if条件在数组的最后一个索引处没有eval。下面的算法应输出[-10, 4] [1, 120, 150] [1, 5, 7],但它会跳过[1, 5, 7]序列。有人可以帮我这里!

public class Sequence {
    public static void main(String[] args) {
        int[] test = {1000, -10, 4, 1, 120, 150, 1, 5, 7};
        Outputpattern(test);
    }

    public static void printList(int[] arr, int l, int u) {
        System.out.println(Arrays.toString(Arrays.copyOfRange(arr, l, u)));
    }

    public static void Outputpattern(int[] arr) {
        int i = 0;
        int l = 0;
        while (i < arr.length - 1) {
            if (arr[i] > arr[i + 1]) {
                if (i != l) {
                    printList(arr, l, i + 1);
                }
                l = i + 1;
            }
            i++;
        }
    }
}

3 个答案:

答案 0 :(得分:2)

只有当您找到的数字低于前一个数字时才打印序列。但是当你到达终点时,你还需要打印一个序列。如果长度大于1,此解决方案将仅在末尾打印序列。

int i = 0;
int l = 0;
while (i < arr.length) {                                // I changed the bound
    if (i == arr.length - 1 || arr[i] > arr[i + 1]) {   // I added a 2nd condition
        if (i != l) {
            printList(arr, l, i + 1);
        }
        l = i + 1;
    }
    i++;
}

答案 1 :(得分:1)

while循环识别序列何时结束并打印出该序列。 但是在循环结束后,您只需要打印最后一个序列。

public static void Outputpattern(int[] arr) {
    int i = 0;
    int l = 0;
    while (i < arr.length - 1) {
        ...
    }

    // the last sequence
    printList(arr, l, i + 1);
}

概括您的问题:在循环列表时,它将在列表中查找子列表。您可以检测循环中的子列表边界并刷新每个子列表。但最后你还需要刷新最后一个列表。

也就是说,您当前的边界检测和记住该状态的变量似乎存在实施问题。

答案 2 :(得分:0)

注意边境条件。

试试这个:

public static void outputPattern(int[] arr) {
        int l = 0;
        for (int i = 0; i < arr.length; i++) {
            if ((i < arr.length - 1) && (arr[i] <= arr[i + 1])) continue;
            if (i != l) printList(arr, l, i + 1);
            l = i + 1;
        }
    }

请遵循java命名约定。