用户输入一串数,然后消除其中重复的数,并打印出来

mac2024-01-24  35

1、从源头消除(在输入的时候就将它消除)

import java.util.Arrays; import java.util.Scanner; public class EliminateSame {     public static void main(String[] args) {         Scanner sc=new Scanner(System.in);         System.out.print("Enter the ten integers: ");         int[] arr=new int[10];//存入用户输入的数据         int size=0;//标记arr数组中当前有效元素的个数         outer:         for(int i=0;i<=9;i++) {//控制用户输入数据为10个             int x=sc.nextInt();             for(int j=0;j<size;j++ ) {//对已经存进数组的有效元素进行遍历                 if(x==arr[j]) {                     continue outer;                 }         /*          *if语句功能:如果当前输入的数据在此数组中已经有相同元素了,则跳过此数据,          *直接读入用户下一个输入的数据。如果不相等,将会顺序执行下面的程序。          */                       }             arr[size]=x;//将数组中不存在的用户输入的数存入数组             //注意当前有效元素是到了size-1的位置,但是存需要存到size位置             size++;//因为存了一个数,所以需要对有效元素加1         }         for(int k=0;k<size;k++) {             System.out.print(arr[k]+" ");         }         //for循环对数组中有效元素进行遍历并打印     } }

2、读入数据完了之后再对其进行消除

import java.util.Arrays; import java.util.Scanner; public class EliminateSame { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int[] arr=new int[10]; System.out.print("Enter ten numbers:"); for(int i=0;i<arr.length;i++){ arr[i]=scanner.nextInt(); } int size=arr.length; for(int i=0;i<size;i++){//运用类似冒泡排序那种原理 for(int j=i+1;j<size;){ if(arr[i]==arr[j]){ for(int k=j+1;k<size;k++){ arr[k-1]=arr[k]; } //上面这个if语句:如果arr[i]==arr[j],说明这两个重复了,对j位置后面那个数往前赋值,覆盖掉那个相同的数,因为少了一个数,所以size--。 //大家需要了解这个程序最终的状态是怎样的,因为一直往前覆盖相同的数,前面全是不同的数,倒数几位(取决于你被消去的重复的数的数目)会是相同的原数组的最后一位数。 size--;//size这个参数到最后就是标记的不同元素的个数。只打印出不同元素,避免全部打印出最后几位相同的数。 //想一下这个过程,思考为什么这里不需要j++? }else{ j++;//相等就size--,并往前覆盖相同数,不相等,就j++,对它不做处理,继续往后寻找相同的数。 } } } //1 2 3 4 5 size=5 for(int i=0;i<size;i++){ System.out.print(arr[i]+" ");//打印前size个互不相同的数 } System.out.println(Arrays.toString(arr));//打印arr为了看程序终态是怎样的 } }

 

最新回复(0)