Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Integer_Duplicates - Fatal编程技术网

Java 如何在整数数组中查找重复项并将其删除?

Java 如何在整数数组中查找重复项并将其删除?,java,arrays,integer,duplicates,Java,Arrays,Integer,Duplicates,我只能使用数组(没有列表或其他任何东西) 我有一个数组:[1,2,3,3,5,6,7,7,9,9] 我想变成:[1,2,3,5,6,7,9] 这是我到目前为止的代码,但它是错误的。我想让它显示上面的数组,但这是实际输出的屏幕截图。我哪里做错了 import java.util.*; class arrayTest { public static void main(String[] args) { int[] array = new int[10];

我只能使用数组(没有列表或其他任何东西)

我有一个数组:[1,2,3,3,5,6,7,7,9,9]

我想变成:[1,2,3,5,6,7,9]

这是我到目前为止的代码,但它是错误的。我想让它显示上面的数组,但这是实际输出的屏幕截图。我哪里做错了

import java.util.*;

class arrayTest {

    public static void main(String[] args) {
        int[] array = new int[10];
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        array[3] = 3;
        array[4] = 5;
        array[5] = 6;
        array[6] = 7;
        array[7] = 7;
        array[8] = 9;
        array[9] = 9;

        Arrays.sort(array);
        int count = 0;
        for (int i = 0; i < array.length - 1; i++) {
            if (array[i] == array[i + 1]) {
                count++;
            }
        }

        int[] newArray = new int[array.length - count];
        for (int j = 1; j < newArray.length; j++) {
            if (array[j] == array[j - 1]) {
                newArray[j] = array[j];
            } else {
                newArray[j - 1] = array[j - 1];
            }
        }

        System.out.println(count);
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(newArray));
    }
}
import java.util.*;
类阵列测试{
公共静态void main(字符串[]args){
int[]数组=新的int[10];
数组[0]=1;
数组[1]=2;
数组[2]=3;
数组[3]=3;
数组[4]=5;
数组[5]=6;
数组[6]=7;
数组[7]=7;
数组[8]=9;
数组[9]=9;
数组。排序(数组);
整数计数=0;
for(int i=0;i
试试这个:

public static int[] deleteDuplicates(int[] input){

    int j = 0;
    int i = 1;
    if(input.length < 2){
        return input;
    }
    while(i < input.length){
        if(input[i] == input[j]){
            i++;
        }else{
            input[++j] = input[i++];
        }   
    }
    int[] output = new int[j+1];
    for(int k=0; k<output.length; k++){
        output[k] = input[k];
    }

    return output;
}
array = IntStream.of(array).distinct().toArray();
公共静态int[]删除重复项(int[]输入){
int j=0;
int i=1;
如果(输入长度<2){
返回输入;
}
while(i对于代码中的(int k=0;k,您正在按长度newArray.length循环
array
中的值,那么
array
的最后一部分将丢失

改变

for (int j = 1; j < newArray.length; j++) {
            if (array[j] == array[j - 1]) {
                newArray[j] = array[j];
            } else {
                newArray[j - 1] = array[j - 1];
            }
        }
for(int j=1;j

int索引=0;
对于(int j=0;j
步骤

1.)排序数组

2.)使用count变量删除重复项并放入
tempArray
中,这将在最后放入零

3.)将此
临时数组的内容从
索引0复制到count+1
到新数组中

public static void main(String[] args) throws Exception {
        int[] array = new int[10];
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        array[3] = 3;
        array[4] = 5;
        array[5] = 6;
        array[6] = 7;
        array[7] = 7;
        array[8] = 9;
        array[9] = 9;

        Arrays.sort(array);

        int[] tempArray = new int[array.length];

        int prev = array[0];
        int count = 0;

         tempArray[count] = array[0];

        for (int i = 1; i < array.length; i++) {
             if (prev != array[i]) {
                 count++;
                 tempArray[count] = array[i];
                }
                prev = array[i];
        }

        int[] finalArray = Arrays.copyOf(tempArray, count+1);// copies content from tempArray (0 to count + 1) index
        System.out.println(finalArray);
    }
publicstaticvoidmain(字符串[]args)引发异常{
int[]数组=新的int[10];
数组[0]=1;
数组[1]=2;
数组[2]=3;
数组[3]=3;
数组[4]=5;
数组[5]=6;
数组[6]=7;
数组[7]=7;
数组[8]=9;
数组[9]=9;
数组。排序(数组);
int[]tempArray=newint[array.length];
int prev=数组[0];
整数计数=0;
tempArray[count]=数组[0];
for(int i=1;i
你的第二个
循环应该是:

for (int i = 0, j = 0; i < array.length; i++)
    if (i == 0 || array[i] != array[i - 1])
        newArray[j++] = array[i];
for(int i=0,j=0;i
导入java.util.*

课堂测试{

public static void main(String[] args) {
    Integer[] array = new Integer[10];
    StringBuffer stringBuffer = new StringBuffer();
    array[0] = 1;
    array[1] = 2;
    array[2] = 3;
    array[3] = 3;
    array[4] = 5;
    array[5] = 6;
    array[6] = 7;
    array[7] = 7;
    array[8] = 9;
    array[9] = 9;

   String arrayString =  Arrays.toString(array);
   for(int index =0 ; index <= arrayString.length(); index++){
      try{
          int number = Integer.parseInt(arrayString.charAt(index)+"");
          if(!stringBuffer.toString().contains(number+"")){
          if(stringBuffer.length()!=0)
              stringBuffer.append(",");
             stringBuffer.append(number);
          }

      }catch(Exception e){

      }
   }
   String[] stringArray = stringBuffer.toString().split(",");
   array = new Integer[stringArray.length];
   for(int index = 0 ; index < stringArray.length ; index++){
       array[index] = Integer.parseInt(stringArray[index]); 
   }
   System.out.println(Arrays.toString(array));
}
publicstaticvoidmain(字符串[]args){
整数[]数组=新整数[10];
StringBuffer StringBuffer=新的StringBuffer();
数组[0]=1;
数组[1]=2;
数组[2]=3;
数组[3]=3;
数组[4]=5;
数组[5]=6;
数组[6]=7;
数组[7]=7;
数组[8]=9;
数组[9]=9;
字符串arrayString=Arrays.toString(数组);
对于(int index=0;index尝试以下方法:

public static int[] deleteDuplicates(int[] input){

    int j = 0;
    int i = 1;
    if(input.length < 2){
        return input;
    }
    while(i < input.length){
        if(input[i] == input[j]){
            i++;
        }else{
            input[++j] = input[i++];
        }   
    }
    int[] output = new int[j+1];
    for(int k=0; k<output.length; k++){
        output[k] = input[k];
    }

    return output;
}
array = IntStream.of(array).distinct().toArray();

你有几件不同的事情:

我哪里做错了

import java.util.*;

class arrayTest {

    public static void main(String[] args) {
        int[] array = new int[10];
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        array[3] = 3;
        array[4] = 5;
        array[5] = 6;
        array[6] = 7;
        array[7] = 7;
        array[8] = 9;
        array[9] = 9;

        Arrays.sort(array);
        int count = 0;
        for (int i = 0; i < array.length - 1; i++) {
            if (array[i] == array[i + 1]) {
                count++;
            }
        }

        int[] newArray = new int[array.length - count];
        for (int j = 1; j < newArray.length; j++) {
            if (array[j] == array[j - 1]) {
                newArray[j] = array[j];
            } else {
                newArray[j - 1] = array[j - 1];
            }
        }

        System.out.println(count);
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(newArray));
    }
}
这意味着当
j
j-1
相等时,您将
j-1
设置为某个值,并且
j
本身保持不变(默认情况下为
0


只需将
newArray[j-1]=array[j-1];
更改为
newArray[j]=array[j-1];

为什么没有列表或任何集合?这是一个家庭作业吗?但基本思想是:创建第二个数组,在外循环中迭代第一个数组,在内循环中迭代第二个数组,只从外循环添加项(原始数组)如果内部循环(新数组)未找到该项。第二个
for
循环需要两个索引计数器,一个用于源数组,一个用于目标数组,因为它们“移动”以不同的速度,即源索引总是增加,但目标索引只在新的数字上增加。仅供参考:构建源数组的更简单方法:
int[]array={1,2,3,3,5,6,7,7,9,9};
Arrays.stream(array).distinct().sorted().toArray()
?这种方法很有效。我以前也得到过类似的结果,但这只是用0替换了重复项。如图所示。@ScottieJoe:-更新了我的答案。希望有帮助!如果有3个或更多重复项的序列,这将不起作用。@I如果无法使用集合API,那么为什么复杂以及复杂是什么你有简单的解决方案,请发布,其他的也可以。我们仍在寻找更简单的解决方案。查看DaDaDom在问题中的评论,了解为什么你的解决方案如此糟糕和复杂!