(消除重复)使用下面的方法头编写方法,消除数组中重复出现的值:
public static int[] eliminateDuplicates(int[] numbers)
编写一个测试程序,读取10个整数,调用该方法,然后显示结果。
分析:这个题目其实是上一篇中“打印不同的数”的变形,将具体的消除重复过程写成方法。
在这里会出现两个容易出错的地方:
(1)在方法的最后我又新建了一个长度为count的数组result[],将长度为numbers.length的数组f[]中的元素全部复制给result[],然后返回result。因为numbers在主函数中定义的长度为10,所以f的长度也为10,将不同的数存储进f中后,若直接返回f,则输出的数组中会用0补足保证10的长度,所以会输出比如:1 2 3 6 4 5 0 0 0 0
(2)方法的构建是为了实现代码复用,在这里应该设置f[]的长度为numbers.length;
有一个不好的地方,题目要求10个数,为了节省不必要的麻烦,必须将数组numbers[]的长度设为10,如果担心溢出而设置了大于10的初始长度,则需要将方法中的result的长度改成count-1,因为numbers后面含有不确定个数的元素0,0也被计算在不同数之内,但若前10个数之内含有0,那就尴尬了。。。
import java.util.Scanner;
public class Exercise6_15 {
public static int[] eliminateDuplicates(int[] numbers){
int count=0;
int[] f = new int[numbers.length];
for(int i=0;i<numbers.length;i++){
int j;
for(j=0;j<count;j++){
if(numbers[i]==f[j]){
break;
}
}
if(j==count){
f[count]=numbers[i];
count++;
}
}
int[] result = new int[count];
for(int i=0;i<count;i++){
result[i]=f[i];
}
return result;
}
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int[] numbers = new int[10];
System.out.print("Enter ten numbers: ");
for(int i=0;i<10;i++){
numbers[i]=input.nextInt();
}
System.out.print("The distinct numbers are: ");
int[] result=eliminateDuplicates(numbers);
for(int i=0;i<result.length;i++){
System.out.print(result[i]+" ");
}
}
}