基础班第5天课后作业有道关于int类型数组去重的方法,老师给的答案(如下),可发现第四步(.遍历新数组,查看是否包含老数组中的当前元素,如果不包含,flag置为true),如果原数组数据有0这个数据则这种方法就会将0除去即获得的新数组不可能包含0元素.
就自己又想了一方法:前面一样只是当遍历去重是用老数组中的i索引的数与老数组中的0~(i-1)索引的数比较如果有相同的flag=false如果没相同的则flag=true;
这样就算原数组中有0元素也不会去除
- public static int[] getSingleArr(int[] arr) {
- //index表示既能表示当前存入数据在新数组中的位置,又能表示存数新数组中的数据的个数
- int index = 0;
- //1.定义一个和老数组长度相同的数组
- int[] newArr = new int[arr.length];
- //2.遍历老数组的内容
- for(int i = 0;i<arr.length;i++) {
- //3.定义flag标记,表示新数组中是否包含当前遍历到的老数组内容
- boolean flag = false;
- //4.遍历新数组,查看是否包含老数组中的当前元素,如果不包含,flag置为true
- for (int j = 0;j<newArr.length;j++) {
- if (arr[i] == newArr[j]) {
- flag = true;
- break;
- }
- }
- //5.flag为false时说明新数组中不包含当前遍历的老数组的内容,并将当前遍历的老数组的元素存入新数组中
- if (!flag) {
- newArr[index++] = arr[i];
- }
- }
- int[] returnArr = new int[index];
- //8.将新数组中的index个元素存入returnArr数组中,并将该数组返回
- for(int i=0;i<index;i++) {
- returnArr[i] = newArr[i];
- }
- return returnArr;
- }
复制代码
以上是老师的代码
下面是自己的代码,不知道有什么问题吗,希望各位大神看看
- public static int[] change(int[] arr) {
- int[] b = new int[arr.length];
- b[0] = arr[0]; //先将新数组的第一个数赋值老数组第一个数,因为索引0的元素没有比他索 引小的元素
- int count = 0;
- for (int i = 1;i < arr.length ; i++ ) { //遍历老数组arr
- boolean flag = true;
- for (int j = i-1; j >= 0 ;j-- ) { //将arr[i] 与比它索引小的数比较(即与arr[i-1]~arr[0])
- if ( arr[j] == arr [i]) {
- flag = false;
- break;
- }
- }
- if (flag) {
- count++;
- b[count] = arr[i];
- }
- }
- int[] c = new int[count];
- for (int i =0;i < count ;i++ ) {
- c[i]=b[i];
- }
- return c;
- }
复制代码
|
|