java 重复消除

gdx19jrr  于 2023-01-04  发布在  Java
关注(0)|答案(9)|浏览(145)

我对这个问题有疑问
使用一维数组解决以下问题:编写一个输入10个整数的应用程序。当读取每个数字时,仅当该数字不是已读取数字的副本时才显示该数字。使用尽可能小的数组解决此问题。在用户输入所有值后显示输入的唯一值的完整集合。
样本输出:
输入10个整数:
12 33 67 9 10 6 6 34
唯一值:
12 33 67 9 10 6 34 19***注意要求重新打印数组但不包含任何重复数字的问题***
这是我的代码

import java.util.Scanner;

public class duplicate 
{

public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    int[] array = new int[10];
    int[] barray = new int[10];

    System.out.println(" Enter 10 integers: ");
    int i ;
    for(i=0;i<array.length;i++)
    {
        array[i]= input.nextInt();
        barray[i] = array[i];
    }
    for(i=0;i<array.length;i++)
    {
        System.out.printf("\t %d ",array[i]);

    }
    System.out.println("\n Unique values are: ");

        for ( i = 0; i < array.length; i++ )
        {

            {
                if ( array[ i ] == barray[ i ] )
                    break;
                  System.out.printf("\t %d",array[i]);

            }

        }

    }

}

5lwkijsr

5lwkijsr1#

你真的需要使用数组吗?Set在这里是最理想的:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    Set<Integer> set = new HashSet<Integer>(10);

    System.out.println(" Enter 10 integers: ");

    for (int i = 0; i < 10; i++) {
        set.add(input.nextInt());
    }
    System.out.println("Unique values are: ");

    for (Integer i : set) {
        System.out.printf("\t %d", i);
    }
}
7nbnzgx9

7nbnzgx92#

假设您的问题是“打印副本”部分不起作用:可以使用a Vector吗?如果可以,可以在打印唯一值时执行以下操作:

for each item in the array
   if the vector does not contain the item
      print the value
      insert the item in the vector
cidc1ykv

cidc1ykv3#

你有没有考虑过你的问题而不关注代码?想象一下,我给了你一张纸,让你写下我喊出的所有数字,不要重复,然后在我写好的时候把数字读给我听。在写代码之前,想想你在真实的世界中是如何解决这个问题的。例如,你会把数字写两遍,然后再把它们划掉吗?你需要两张纸吗?一个有副本一个没有

0h4hbjxa

0h4hbjxa4#

对于最后一个循环,我会考虑如下内容:

for(int i = 0; i < array.length; i++)
{
    Boolean duplicated = false;
    for(int j = 0; j<i; j++) {
       if(array[i] == array[j]) {
         //number already printed
         duplicated = true; 
         break;
       }
    }
    if(duplicated == false) //print number here.
}

这不是最好的方法,但它遵循你已经做过的.
最好的方法是使用一个适当的结构,我不是一个Java用户,但也许HashSet是一条路要走。

mrfwxfqh

mrfwxfqh5#

Arrays类http://java.sun.com/javase/6/docs/api/java/util/Arrays.html对于本主题有一些有用的方法,如sort。
1.排序数组
1.复制第一个整数到一个新的输出数组
1.在所有整数上循环
1.如果先前整数与当前整数不同
1.创建新数组,输出数组大小+1,复制所有值,最后添加最后一个值
跳过输入,循环可能如下所示:

int[] out = new int[1];     
    int[] ints = new int[]{3,56,2,98,76,4,9,2,3,55};
    Arrays.sort(ints);
    out[0] = ints[0];                                   //handle first value
    for(int i = 1; i < ints.length; i++){           
        if(ints[i-1] != ints[i]){               
            int[] temp = new int[out.length+1];
            for(int j = 0; j < temp.length-1; j++){
                temp[j] = out[j];                       //copy all previous
            }               
            temp[temp.length - 1] = ints[i];            //add last value
            out = temp;
        }
    }
    System.out.println(Arrays.toString(out));
kmpatx3s

kmpatx3s6#

既然所有的值都是整数,那么使用BitSet怎么样?

BitSet bs = new BitSet();

for(int i=0; i<array.lenght; i++)
{
    bs.set(array[i]);    
}

System.out.println("Unique Values are: "+bs.toString());
mlnl4t2r

mlnl4t2r7#

有两件事需要改变:
1.仅使用单个阵列
1.过滤输入上的重复项,而不是输出。
如果你为每个输入在数组上循环寻找dups. Dup?,那么不要插入,而不是dup. add到数组中。
使用尽可能小的数组是一个技巧,因为它取决于提前知道将输入多少副本,而你可能不知道。有两种解决方案,使用一个只够分配中唯一数字的数组,或者当你超过数组的大小时,创建一个新的数组并把所有的值复制到它上面。赋值是否意味着你只能使用一个数组的一个示例,而这个示例恰好是单-维的还是你使用的数组必须是一维的但你可以使用多个数组?

ryevplcw

ryevplcw8#

你也可以尝试一个更短的,如果更模糊...

System.out.println("Unique values "+
    new LinkedHashSet<String>(Arrays.asList(scanner.nextLine().split(" +"))));
mdfafbf1

mdfafbf19#

public class DuplicateElimination2 {
    
    static Scanner input = new Scanner(System.in);

    static int[] array1 = new int[10];

    public static void main(String[] args) {
        //loop insert 10 integer seperated by space into the array.
        for (int counter = 0; counter < array1.length; counter++) {
            //convert string input of digit into int values
            int userInput = Integer.parseInt(input.next()); //collect user input
            
            //assign element userInput into an index of array1
            array1[counter] = userInput;
        }
        //printing unique values
        for (int i = 0; i < array1.length; i++) {
            int ifNumberExist = 0; //hold the current number a value appears
            //print the first index since it need not to be compared with any other index
            if(i == 0)
                System.out.print(array1[i] + " ");
            else
                //j < i means every element from array1[j] will be compare to array1[1 - i]
                for (int j = 0; j < i; j++) {
                    if(array1[j] == array1[i])//check if the array element are equal
                        ++ifNumberExist;//increament if a match is found
                }
            //print current array1 element if no match was found
            if(ifNumberExist < 1 && i > 0)
                System.out.print(array1[i] + " ");
        }
    }
    
}

相关问题