打印数字序列没有连续重复?

时间:2014-10-03 05:20:45

标签: java arrays

给出一系列数字:

1 2 2 5 5 5 1 7 3 7 7 7

输出应为

1 2 5 1 7 3 7

我的代码的当前输出是

1 2 5 1 7 3

我无法解决问题。任何人都可以告诉我我应该做什么或改变我的代码?

这是我目前的代码:

public class Q3 {
    public static void main(String args[]) {
        int [] input=new int[]{1 ,2, 2, 5, 5, 5, 1, 7, 3, 7, 7, 7};
        int current= input[0];
        boolean found=false;
        for(int i=0; i< input.length; i++) {
             if(current == input[i] && !found) {
                found=true;
             } else if(current!=input[i]) {
                 System.out.print(" " + current);
                 current=input[i];
                 found=false;
             }
        }    
    }
}

5 个答案:

答案 0 :(得分:2)

基本问题是,你需要用不等于第一个元素的东西来种子current,这样,你可以循环遍历数组,没有问题,标志或其他技巧,例如...

int[] input = new int[]{1, 2, 2, 5, 5, 5, 1, 7, 3, 7, 7, 7};
int current = -input[0];

for (int i = 0; i < input.length; i++) {
    if (current != input[i]) {
        current = input[i];
        System.out.print(" " + current);
    }
}
System.out.println("");

哪些输出......

1 2 5 1 7 3 7

这会将current值设置为第一个元素的负值(在此-1中),因此当我们进行第一次比较时,-1 != 1然后我们可以正常进行。 ..

答案 1 :(得分:1)

你可以这样试试

例如:

int[] input = new int[]{1, 2, 2, 5, 5, 5, 1, 7, 3, 7, 7, 7};
int temp =input[0];
boolean isFirst=true;
for (int i = 0; i < input.length; i++) {
    if(isFirst){
       System.out.print(temp);
       isFirst=false;
    }
    if (temp != input[i]) {
       System.out.print(input[i]);
    }
     temp = input[i];
}

Out put:

 1251737

逻辑:我只是第一次出现连续数字。

答案 2 :(得分:1)

如果您不想删除所有重复项,只能删除最接近的代码,您可以大量简化代码。

public class Q3 {
    public static void main(String args[]) {
        int [] input=new int[]{1 ,2, 2, 5, 5, 5, 1, 7, 3, 7, 7, 7};
        int base = input[0];
        System.out.print(base);
        for (int current : input) {
            if (current != base) {
                base = current;
                System.out.print(" " + base);
            }
        }    
    }
}

输出:

1 2 5 1 7 3 7

答案 3 :(得分:0)

在不给予信用的情况下使用其他答案是不对的

int[] input = new int[]{1, 2, 2, 5, 5, 5, 1, 7, 3, 7, 7, 7};
int current = input[0];
boolean found = false;

for (int i = 0; i < input.length; i++) {
    if (current == input[i] && !found) {
        found = true;
    } else if (current != input[i]) {
        System.out.print(" " + current);
        current = input[i];
        found = false;
    }
}
System.out.print(" " + current); <--- you forgot this line 

输出:

1 2 5 1 7 3 7

我的回答可以在这里找到 How to efficiently remove duplicates from an array without using Set

答案 4 :(得分:0)

int [] input = new int[]{1 ,2, 2, 5, 5, 5, 1, 7, 3, 7, 7, 7};
int previous = 0;
boolean started = false; // loop is not started yet

for (int i = 0; i < input.length; i++)
{
    // if the loop is not started, or the number is not equal to previously printed number...
    if (!started || input[i] != previous) {
        System.out.print(input[i] + " ");
        previous = input[i];
    }
    started = true;
}