java实现数组去重的问题

Cary_Liu 2012-03-30 04:01:12
想实现数组去重问题。下面我的是方法是采用0去其中换掉重复的值,然后按不为零的输出,达到去重的。然后我在想能不能直接实现重复的值一个个被覆盖,比如1 1 2 3 3 4 5 6 7 8;其中数组装的一个1和3直接清除掉,数组长度也缩短2个呢?
具体该怎么实现呢?困惑了好久

package test;
import java.util.Scanner;
public class Exercise6_51 {
public static void main(String args[]){
int[] a=new int[10];
Scanner input=new Scanner(System.in);
System.out.print("Enter ten numbers:");
for(int i=0;i<a.length;i++){
a[i]=input.nextInt();
}
for(int i=0;i<a.length;i++){
for(int j=i;j<a.length-1;j++){
if(a[i]==a[j+1]){
a[j+1]=0;
}
}
}
//java.util.Arrays.sort(a);
System.out.print("The distinct numbers are:");
for(int i=0;i<a.length;i++){
if(a[i]!=0){
System.out.print(a[i]+" ");
}
}

}
}

...全文
10236 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑马_韩天雷 2014-08-08
  • 打赏
  • 举报
回复
引用 7 楼 JieTouLangRen 的回复:
楼主的方法中存在一个问题,如果数组本身就存在重复的0,处理就会得到错误的结果 使用set是一种好办法 如果要自己实现的话, 常规的做法是新建一个数组,原始数组中的值一次放入新建数组中,放入之前进行比较 复杂度为O(n*n)
不错
xc_bm_dtw 2014-05-22
  • 打赏
  • 举报
回复
package com.sesan.last; import java.util.Scanner; public class Exercise6_51 { public static void main(String args[]){ int[] a={1,3,4,5,3,2,5,6,4,3,2,2,2,2,2,2,6}; int length=a.length; //int i,j,k; for(int i=0;i<length;i++){ for(int j=i;j<length-1;j++){ if(a[i]==a[j+1]){ for(int k=j+1;k<length-1;k++){ a[k]=a[k+1]; for(int m=0;m<length;m++){ System.out.print(a[m]+" "); } System.out.println(","); } length--; // j--; } } } //java.util.Arrays.sort(a); System.out.print("The distinct numbers are:"); for(int i=0;i<length;i++){ System.out.print(a[i]+" "); } } } 结果还有重复的,需要再改进The distinct numbers are:1 3 4 5 2 6 2 2
xc_bm_dtw 2014-05-22
  • 打赏
  • 举报
回复
你这个代码还有bug哦。。。。
Cary_Liu 2012-03-31
  • 打赏
  • 举报
回复

package test;
import java.util.Scanner;
public class Exercise6_51 {
public static void main(String args[]){
int[] a=new int[10];
int length=a.length;
//int i,j,k;
Scanner input=new Scanner(System.in);
System.out.print("Enter ten numbers:");
for(int i=0;i<a.length;i++){
a[i]=input.nextInt();
}
for(int i=0;i<length;i++){
for(int j=i;j<length-1;j++){
if(a[i]==a[j+1]){
for(int k=j+1;k<length-1;k++){
a[k]=a[k+1];
}
length--;
j--;
}
}
}
//java.util.Arrays.sort(a);
System.out.print("The distinct numbers are:");
for(int i=0;i<length;i++){
System.out.print(a[i]+" ");
}
}
}
这样就可以了,0的问题解决了,谢谢大家了
chidun123 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

直接用Set不就行了吗?
[/Quote]
受教了~利用TreeSet没有重复元素的特性达到去除重复元素的目的
Cary_Liu 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
楼主的方法中存在一个问题,如果数组本身就存在重复的0,处理就会得到错误的结果
使用set是一种好办法
如果要自己实现的话,
常规的做法是新建一个数组,原始数组中的值一次放入新建数组中,放入之前进行比较
复杂度为O(n*n)
[/Quote]
嗯,也是哦...本身有零的话真出问题了...
JieTouLangRen 2012-03-30
  • 打赏
  • 举报
回复
楼主的方法中存在一个问题,如果数组本身就存在重复的0,处理就会得到错误的结果
使用set是一种好办法
如果要自己实现的话,
常规的做法是新建一个数组,原始数组中的值一次放入新建数组中,放入之前进行比较
复杂度为O(n*n)
Firebirds 2012-03-30
  • 打赏
  • 举报
回复
你不用Set要自己写的话,就实现equals和hashcode来判断,具体细节你可以参考Set
菖蒲老先生 2012-03-30
  • 打赏
  • 举报
回复

public static void main(String[] args) {

int[] arr = new int[] { 1, 1, 2, 3, 3, 4, 5, 6, 7, 8 };
Set<Integer> set = new TreeSet<Integer>();

for (int i : arr) {
set.add(i);
}

int[] des = new int[set.size()];
int j = 0;
for (Integer i : set) {
des[j++] = i;
}
System.out.println(Arrays.toString(des));
}
xj_struggle 2012-03-30
  • 打赏
  • 举报
回复
用set 不就ok 了吗?
干嘛要自己去写方法呢!
X497347200 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
直接用Set不就行了吗?
[/Quote]
用Set是最简单的
love_love 2012-03-30
  • 打赏
  • 举报
回复
直接用Set不就行了吗?
sdojqy1122 2012-03-30
  • 打赏
  • 举报
回复
你可以用其他集合替换啊,在换回数组

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧