本帖最后由 Kingchen 于 2016-5-27 22:11 编辑
/*
分析以下需求,并用代码实现:(目前数组操作完成,学完集合使用集合完成)
(1)定义一个int类型的一维数组,内容为{6,2,9,6,1,2,6,7,8}
(2)去除上面定义的数组中的重复元素,打印最终结果{6, 2, 9, 1, 7, 8}
*/
import java.util.Arrays;//导入类
class Test2{
public static void main(String[] args){
int[] arr = {6,2,9,6,1,2,6,7,8};
System.out.println("含重数组是:"+Arrays.toString(arr));
arr = getSingleArray(arr);
System.out.println("去重数组是:"+Arrays.toString(arr));
}
//数组去重的方法
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;//如果有重复的数,则标记为true
//4.遍历新数组,查看是否包含老数组中的当前元素,如果不包含,flag置为true
for (int j=0; j<newArr.length; j++){
/*第一次拿出老数组的第一个元素和新数组的元素挨个比较,如果有重复的值则将
flag标记为false,并且跳出for循环,没必要和newArr数组的元素进行比较了
*/
if (arr==newArr[j]){//
flag = true;
break;
}
}
/*5.flag为false时说明新数组中不包含当前遍历的老数组的内容,
并将当前遍历的老数组的元素存入新数组中*/
if (!flag){ //当flag为false是执行,falg为true不会执行,非true即false,就不会执行if里面的内容
newArr[index++] = arr; }
}
//完成以上步骤可以将重复的元素去掉,但是数组的长度并没有改变,剩下的含有0
/*
例如:未去重的数组[6, 2, 9, 6, 1, 2, 6, 7, 8]
去重后的数组[6, 2, 9, 1, 7, 8, 0, 0, 0]
所以应该把0去掉,前面的index已经记录了数组的有效长度
*/
int[] returnArr = new int[index];
//将去重数组的元素赋值给返回数组
for (int i=0; i<index; i++){
returnArr = newArr;
}
//最后将数组返回
return returnArr;
}
}
/*
方法中new出来的数组也是存储在堆内存中
arr = getSingleArr(arr);
是将arr指向了一块新的内存,所以数组的长度变化了。
*/
|
|