Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中对跳过数字的整数数组进行分组_Java_Arrays - Fatal编程技术网

在Java中对跳过数字的整数数组进行分组

在Java中对跳过数字的整数数组进行分组,java,arrays,Java,Arrays,假设我有以下int数组: [1,2,3,6,7, 8, 9,20, 22] Numbers 1 through 3, 6 through 9, 20, 22 我希望能够根据上面的数组向用户显示以下内容: [1,2,3,6,7, 8, 9,20, 22] Numbers 1 through 3, 6 through 9, 20, 22 我怎么能这样做呢?基本上检查前一个数字是否等于当前数字-1?我想我只是回答了我自己的问题,但是任何捷径/指针都是受欢迎的 注意:只处理整数,没有负数(它不是

假设我有以下
int数组

[1,2,3,6,7, 8, 9,20, 22]
Numbers 1 through 3, 6 through 9, 20, 22
我希望能够根据上面的
数组向用户显示以下内容:

[1,2,3,6,7, 8, 9,20, 22]
Numbers 1 through 3, 6 through 9, 20, 22
我怎么能这样做呢?基本上检查前一个数字是否等于当前数字-1?我想我只是回答了我自己的问题,但是任何捷径/指针都是受欢迎的

注意:只处理整数,没有负数(它不是整数)。

尝试以下方法:

int[] numberArray = [1, 2, 3, 6, 7, 8, 9, 20, 22];
int rangeStart = -999;
int rangeEnd = -999;
for (int n : numberArray) {
    if (n > rangeEnd + 1) {
        if (rangeEnd = -999) {
            System.out.print("Numbers ");
        else if (rangeEnd > rangeStart) {
            System.out.printf("%d through %d, ", rangeStart, rangeEnd);
        } else {
            System.out.printf("%d, ", rangeEnd);
        }
        rangeStart = rangeEnd = n;
    } else {
        rangeEnd = n;
    }
}
if (rangeEnd > rangeStart) {
    System.out.printf("%d through %d, ", rangeStart, rangeEnd);
} else {
    System.out.printf("%d,", rangeEnd);
}
可能需要对逗号和换行符的使用进行一些微调。

尝试以下方法:

int[] numberArray = [1, 2, 3, 6, 7, 8, 9, 20, 22];
int rangeStart = -999;
int rangeEnd = -999;
for (int n : numberArray) {
    if (n > rangeEnd + 1) {
        if (rangeEnd = -999) {
            System.out.print("Numbers ");
        else if (rangeEnd > rangeStart) {
            System.out.printf("%d through %d, ", rangeStart, rangeEnd);
        } else {
            System.out.printf("%d, ", rangeEnd);
        }
        rangeStart = rangeEnd = n;
    } else {
        rangeEnd = n;
    }
}
if (rangeEnd > rangeStart) {
    System.out.printf("%d through %d, ", rangeStart, rangeEnd);
} else {
    System.out.printf("%d,", rangeEnd);
}

可能需要对逗号和换行符的使用进行一些微调。

对于我糟糕的格式设置,很抱歉,您可以考虑一些伪代码

for(int i = 0; i < length; i++){
    start = int[i]
    compare int[i] to int[i+1] {
        if true, store as end, compare to next in array
        else, break out
    }

    if start != end, print start through end
    else, print start
}
for(int i=0;i

**编辑:并将i增加为最后一个+1

对不起,我的格式很糟糕,只是一些你可以考虑的伪代码

for(int i = 0; i < length; i++){
    start = int[i]
    compare int[i] to int[i+1] {
        if true, store as end, compare to next in array
        else, break out
    }

    if start != end, print start through end
    else, print start
}
for(int i=0;i

**编辑:并将增量i作为最后一个+1

不是最好看的代码,但可以工作:

public static void display(int[] input) {
    String out = "Numbers ";
    int first = input[0];
    int last = -1;
    int older = first;
    for (int i : input) {
        if (i == older + 1) {
            last = i;
            older++;
        } else if (i > older + 1) {
            out += last > first ? first + " through " + last + ", " : first + ", ";
            first = i;
            older = i;
        }
        if (i == input[input.length - 1]) {
            out += last > first ? first + " through " + last : first;
        }
    }
    System.out.println(out);
}
例如:

int[] in1 = { 1, 2, 3, 6, 7, 8, 9, 20, 22 };
int[] in2 = { 1, 2, 3, 6, 7, 8, 9, 20, 21, 22 };
display(in1);
display(in2);
产出:

Numbers 1 through 3, 6 through 9, 20, 22
Numbers 1 through 3, 6 through 9, 20 through 22

不是最好看的代码,但可以工作:

public static void display(int[] input) {
    String out = "Numbers ";
    int first = input[0];
    int last = -1;
    int older = first;
    for (int i : input) {
        if (i == older + 1) {
            last = i;
            older++;
        } else if (i > older + 1) {
            out += last > first ? first + " through " + last + ", " : first + ", ";
            first = i;
            older = i;
        }
        if (i == input[input.length - 1]) {
            out += last > first ? first + " through " + last : first;
        }
    }
    System.out.println(out);
}
例如:

int[] in1 = { 1, 2, 3, 6, 7, 8, 9, 20, 22 };
int[] in2 = { 1, 2, 3, 6, 7, 8, 9, 20, 21, 22 };
display(in1);
display(in2);
产出:

Numbers 1 through 3, 6 through 9, 20, 22
Numbers 1 through 3, 6 through 9, 20 through 22

可以找到使用Ideone的实例。在
O(n)
时间内运行


Integer[]A={1,2,3,6,7,8,9,20,22};
int start=0,结束;
系统输出打印(“数字”);
while((结束=开始)
可以找到使用Ideone的实时示例。在
O(n)
时间内运行


Integer[]A={1,2,3,6,7,8,9,20,22};
int start=0,结束;
系统输出打印(“数字”);
while((结束=开始)
整数按定义包括负数。不包括负数的是自然数。也就是说,问题中的数字是否为负数并不重要。输入是否已排序?您可以检查:您是否编写了代码/尝试了任何操作?优化实际代码比优化理论代码更容易。WOW4答案都是负数,根据定义,整数包括负数。不包括负数的是自然数。也就是说,问题中的数字是否为负数并不重要。输入是否已排序?您可以检查:您是否编写了代码/尝试了任何操作?优化实际代码比优化理论代码更容易。Wow 4答案都是否定票。不是我,但我猜这是因为只有投票率低的人认为给OP一个复制/粘贴的答案对他/她并没有真正的帮助。@user3580294我同意,我更倾向于理论而不是实际代码。但我还是要少一点。无论如何,我理解它背后的原理。@Eric如果有帮助,你能选择它作为正确的答案吗?@b科索完成了,尽管我不得不修改一下代码,因为它总是以逗号结尾。刚刚创建了一个
StringBuilder
,并删除了
while
循环之外的最后一个逗号,除此之外效果非常好。@Eric,您还可以为逗号添加一个条件。我已经在代码中添加了这一点。不是我,但我猜这是因为投票人认为给OP一个复制/粘贴的答案对他/她并没有真正的帮助。@user3580294我同意,我更倾向于理论而不是实际的代码。但我还是要少一点。无论如何,我理解它背后的原理。@Eric如果有帮助,你能选择它作为正确的答案吗?@b科索完成了,尽管我不得不修改一下代码,因为它总是以逗号结尾。刚刚创建了一个
StringBuilder
,并删除了
while
循环之外的最后一个逗号,除此之外效果非常好。@Eric,您还可以为逗号添加一个条件。我已经把它添加到代码中了。