黑马程序员技术交流社区
标题:
求解
[打印本页]
作者:
z47057554
时间:
2015-3-4 17:12
标题:
求解
本帖最后由 z47057554 于 2015-3-4 19:54 编辑
为什么内存溢出,求解
/**
* 第5题: 数组去重复,
* 例如: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8}
* @author
*
*答:分析:已知数组,int[]arr,定义起始标记start,定义方法getNewarr(arr,start),该方法可以得到
*一个数组newarr,newarr在start之后没有元素与arr[start]重复,完动作后,
*getNewarr(newarr,start++);当start从0位置开始时,它每调用一次getNewarr,对应位置在新得到的
*数组中是唯一的,并保留了第一次在原数组中出现的顺序,当start=newarr.length-2时,newarr[start]
*无论是否等于newarr[newarr.length-1],再调用一次,都会得到所有元素唯一的数组
*/
public class Test52 {
public static void main(String[] args) {
int[] arr={4,2,4,6,1,2,4,7,8};
System.out.println("原数组为");
myPrint(arr);
System.out.println("去重后数组为");
myPrint(getNewarr(arr,0));
}
public static int[] getNewarr(int[]arr,int start){
if(start < arr.length-1){
int count=0;
for (int i = start+1; i < arr.length; i++) {
if(arr[i]==arr[start])
count++;
}
int[] newarr=new int[arr.length-count];
for (int i = 0; i < start+1; i++) {
newarr[i]=arr[i];
}
if(count!=0){
int arrnum=start+1;
for (int i = start+1; i < newarr.length; i++) {
for ( ; arrnum < arr.length; arrnum++) {
if(arr[arrnum]==newarr[start])
continue;
else{
newarr[i]=arr[arrnum];
arrnum++;
break;
}
}
}
return getNewarr(newarr,start++);
}
else
return getNewarr(arr,start++);
}
else
return arr;
}
public static void myPrint(int[] arr){
System.out.print("[");
for(int i=0;i <arr.length;i++){
if(i!=arr.length-1)
System.out.print(arr[i]+",");
else
System.out.println(arr[i]+"]");
}
}
}
复制代码
作者:
zfgrinm
时间:
2015-3-4 19:44
你可以考虑用集合,简单易懂
package com.itheima;
import java.util.ArrayList;
/*
* 8、 数组去重复,例如: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8}
*/
public class Test8 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int [] arr={4,2,4,6,1,2,4,7,8};
//调用去重方法
Object [] b=getArray(arr);
//打印数组元素
for(int i=0;i<b.length;i++)
{
System.out.println(b[i]);
}
}
//利用集合中的contains去除重复元素
public static Object [] getArray(int []arr)
{
//定义集合
ArrayList<Integer> list =new ArrayList<Integer>();
//遍历数组
for(int i=0;i<arr.length;i++)
{
//集合中没有这个元素时,才添加,避免添加重复元素;这里有自动装箱.
if(!list.contains(arr[i]))
list.add(arr[i]);
}
//集合变数组
return list.toArray();
}
}
复制代码
作者:
z47057554
时间:
2015-3-4 19:52
zfgrinm 发表于 2015-3-4 19:44
你可以考虑用集合,简单易懂
看了许久自己发现了,是后置++,先传值,后自增的特点导致的,递归的参数始终是初始值导致的
start++,换成 ++start,就能正确运行了
作者:
aswq444cs1
时间:
2015-3-5 15:53
加油!自己好好调吧,元宵节快乐!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2