我的想法:
定义一个数组:b[a.Length]
遍历数组a,对每一个a[i],判断是否在b中
if a[i]在b中,继续
else 把a[i]加到b中, 我的问题是 如果 a[i]在b中, 应该怎样继续检查下一个? 如果是string可以令a[i]=null, 但是是int[],应该怎样用java语言表达呢?
定义一个数组:b[a.Length]
遍历数组a,对每一个a[i],判断是否在b中
if a[i]在b中,继续
else 把a[i]加到b中, 我的问题是 如果 a[i]在b中, 应该怎样继续检查下一个? 如果是string可以令a[i]=null, 但是是int[],应该怎样用java语言表达呢?
我的method:
public static int[] removeDuplicate(int[] p) { int[] temp = new int[p.length];
int t = 0;
for (int i = 0; i < p.length; i++) {
boolean isDuplicate = false;
for(int j=0; j <= i; j++){
if(temp[j] == p[i]){
isDuplicate = true;
continue;
}
else{
isDuplicate = false;
}
}
if (!isDuplicate) {
temp[t++] = p[i];
}
} //for
但是在做junit test时 显示array index out of bound exception
import java.util.ArrayList;
import java.util.List;
---------------------------------------------------------------
/**
* 去掉重复项的函数
*@param intArray 要去掉重复项的int数组
*@return int[] 返回去掉重复项的int数组
*/
public int[] wipeOffRepeat(int[] intArray){
List list = new ArrayList();
for(int i = 0;i < intArray.length;i++){
if( !list.contains(new Integer(intArray[i]))){
list.add(new Integer(intArray[i]));
}
}
int[] returnArray = new int[list.size()];
for(int i = 0; i < list.size();i++){
returnArray[i] = ((Integer)list.get(i)).intValue();
}
return returnArray;
}
int[] temp = new int[p.length];
int t = 0;
for (int i = 0; i < p.length; i++) {
boolean isDuplicate = false;
for(int j=0; j <= i; j++){
if(temp[j] == p[i]){
isDuplicate = true;
break;//这里不是continue
} else{
isDuplicate = false;
}
}
if (!isDuplicate) {
temp[t++] = p[i];
}
} //for
return temp;//加一句返回
}但这样做不是一种好办法,因为去掉重复项后,新的数组一般都没原来的数组那么长,你却定义了和原来的数组一样长的新数组,这时后面的数组元素默认为0
int[] is = new int[]{1,2,3,3};
for(int i = 0; i < is.length; i++){
if(!list.contains(new Integer(is[i])))
list.add(new Integer(is[i]));
}
Integer[] iis = (Integer[]) list.toArray();
========================
数组的空间分配后是不能修改的ArrayList的方法我已经给出了,我想没有题目会规定用这种方法吧,只要返回的是正确的int[],因为在没完成比较前,你并不知道去掉重复项后的数组有多少项,所以用List 存,然后返回时才转成int[],
你不能在不知道数组的长度前又要用定长的数组
把所有数put进去,在get出来,就没重复的了
不知道....anyways , thanks for all your help
loop: for (int i = 1; i < num; ) {
// 从第二个元素开始处理
for (int j = 0; j < i; j++) {
// 把当前元素跟前面的每个元素进行比较
if (a[i] == a[j]) {
// 如果发现重复,用最末的元素替换当前元素
a[i] = a[num - 1];
num--;
// 重新处理当前元素
continue loop;
}
}
// 继续处理下一个元素
i++;
} // 至此,a[0]..a[num-1] 就是无重复的了
或者最简单的用hashmap
如果是在做作业,特别是数据结构的作业,还是自己先搞懂再说吧。
int[] b=new int[a.length];
int bnum=0;
boolean finded;
for(int i=0;i<a.length;i++){
finded=true;
for(int j=0;j<b.length;j++){if(a[i]==b[j]){finded=false;}}
if(finded){b[bnum]=a[i];bnum++;}
}
for(int i=0;i<a.length;i++){System.out.print(a[i]);}
System.out.println("");
for(int i=0;i<b.length;i++){System.out.print(b[i]);}
--------------------------
12342431234000
if(array.IndexOf(currentOne)==-1)
array.add (currentOne);
HashSet set=new LinkedHashSet();
for(int i=0;i<a.length;i++)
{
set.add(a[i]);
}
int[] b=new int[set.size()];
int c=0;
for(Iterator it=set.iterator();it.hasNext();)
{
b[c]=(Integer)it.next();
System.out.println(b[c]);
c++;
}