我正在编写一种用于在数组中打印增加序列的算法,但我当前的解决方案不会仅打印最后一个序列。这是因为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++;
}
}
}
答案 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命名约定。