给出一系列数字:
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;
}
}
}
}
答案 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;
}