我对这个问题有疑问
使用一维数组解决以下问题:编写一个输入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]);
}
}
}
}
9条答案
按热度按时间5lwkijsr1#
你真的需要使用数组吗?
Set
在这里是最理想的:7nbnzgx92#
假设您的问题是“打印副本”部分不起作用:可以使用a Vector吗?如果可以,可以在打印唯一值时执行以下操作:
cidc1ykv3#
你有没有考虑过你的问题而不关注代码?想象一下,我给了你一张纸,让你写下我喊出的所有数字,不要重复,然后在我写好的时候把数字读给我听。在写代码之前,想想你在真实的世界中是如何解决这个问题的。例如,你会把数字写两遍,然后再把它们划掉吗?你需要两张纸吗?一个有副本一个没有
0h4hbjxa4#
对于最后一个循环,我会考虑如下内容:
这不是最好的方法,但它遵循你已经做过的.
最好的方法是使用一个适当的结构,我不是一个Java用户,但也许
HashSet
是一条路要走。mrfwxfqh5#
Arrays类http://java.sun.com/javase/6/docs/api/java/util/Arrays.html对于本主题有一些有用的方法,如sort。
1.排序数组
1.复制第一个整数到一个新的输出数组
1.在所有整数上循环
1.如果先前整数与当前整数不同
1.创建新数组,输出数组大小+1,复制所有值,最后添加最后一个值
跳过输入,循环可能如下所示:
kmpatx3s6#
既然所有的值都是整数,那么使用BitSet怎么样?
mlnl4t2r7#
有两件事需要改变:
1.仅使用单个阵列
1.过滤输入上的重复项,而不是输出。
如果你为每个输入在数组上循环寻找dups. Dup?,那么不要插入,而不是dup. add到数组中。
使用尽可能小的数组是一个技巧,因为它取决于提前知道将输入多少副本,而你可能不知道。有两种解决方案,使用一个只够分配中唯一数字的数组,或者当你超过数组的大小时,创建一个新的数组并把所有的值复制到它上面。赋值是否意味着你只能使用一个数组的一个示例,而这个示例恰好是单-维的还是你使用的数组必须是一维的但你可以使用多个数组?
ryevplcw8#
你也可以尝试一个更短的,如果更模糊...
mdfafbf19#