A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 复仇的撒旦 于 2015-3-31 18:52 编辑
  1. import java.util.*;
  2. class  Test6
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Integer[] ig = {1,1,2,2,3,3,4,5,6,7};
  7.                 putRester put = new putRester(ig);
  8.                 put.pr();
  9.         }
  10. }

  11. class putRester  //定义一个取出重复元素的类
  12. {
  13.         private Integer[] ig;
  14.         putRester(Integer[] ig)
  15.         {
  16.                 this.ig = ig;
  17.         }
  18.         public void pr()
  19.         {        
  20.                 List<Integer> al = Arrays.asList(ig);  //将数组变成List集合
  21.                 System.out.println(al);
  22.                 ArrayList<Integer> al1 = new ArrayList<Integer>(); //定义一个新的ArrayList集合用于存入取出的元素
  23.                 Iterator<Integer> it = al.iterator();  //用迭代器将集合中的元素取出
  24.                 while(it.hasNext())
  25.                 {        Integer ige = it.next();
  26.                         if(!al1.contains(ige))     //判断一下,新集合里面有没有这个元素。没有才存进去。
  27.                         {
  28.                                 al1.add(it.next());    //将元素存入新集合中
  29.                         }
  30.                 }
  31.                 Integer[]  ige = al1.toArray(new Integer[10]);  //就是这句,为什么打印出来的是ige的哈希值
  32.                 System.out.println(ige);

  33.         }
复制代码


QQ截图20150331184751.png (1.13 KB, 下载次数: 42)

QQ截图20150331184751.png

22 个回复

倒序浏览
{:3_47:}因为你在打印Integer[]对象 你换成ige.toString
回复 使用道具 举报
林吉前 发表于 2015-3-31 19:07
因为你在打印Integer[]对象 你换成ige.toString

不行啊,用toString()返回的不还是一个String对象么?
回复 使用道具 举报
本帖最后由 liyanghml 于 2015-3-31 21:01 编辑

上楼 说的 对啊  ,你想想看,有直接一句System打印数组这一说吗,不都是   便利循环  才能打出数组啊。

ige.toString()就是让你以字符串的形式输出
要么 你就按照  以下格式输出
for(int x =0;x<ige.length;x++)
{
     System.out.println(ige[x]);
}
回复 使用道具 举报
暂时还看不懂
回复 使用道具 举报
虽然看不懂 但还是赞一个!!!!!!!
回复 使用道具 举报
复仇的撒旦 发表于 2015-3-31 20:09
不行啊,用toString()返回的不还是一个String对象么?

{:3_47:}那就是Integer没有重写toString或者toString就是跟Object一样的
回复 使用道具 举报
林吉前 发表于 2015-3-31 21:31
那就是Integer没有重写toString或者toString就是跟Object一样的

{:3_47:}你那不是Integer 是Integer[]数组 是数组
回复 使用道具 举报
hhh233 中级黑马 2015-3-31 21:46:53
9#
liyanghml 发表于 2015-3-31 21:00
上楼 说的 对啊  ,你想想看,有直接一句System打印数组这一说吗,不都是   便利循环  才能打出数组啊。

i ...

对,直接打出数组名 只是打印出了地址而已
回复 使用道具 举报
toArray(new Integer[10]) 里边在new个数组干嘛呢?
回复 使用道具 举报
Grady 中级黑马 2015-3-31 22:13:07
11#
复仇的撒旦 发表于 2015-3-31 20:09
不行啊,用toString()返回的不还是一个String对象么?

重写toString方法试试
回复 使用道具 举报
是的需要重写toString,哥们可以试一试。
回复 使用道具 举报
toString方法你没重写,所以调用的是Object类的,打出来的自然是哈希值了(我记得不是地址值么)
回复 使用道具 举报
你的程序有错误哦,打印是地址值, 不再多说了,想必你已经明白了……因为他是一个对象数组,怎么能直接打印了,但是最简单的查看方式是这样的……可以直接打印al1即可,这样也能显示新集合中的方法:
  1. import java.util.*;
  2. class  Test61
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Integer[] ig = {1,1,2,2,3,3,4,5,6,7};
  7.                 putRester put = new putRester(ig);
  8.                                 put.pr();
  9.         }
  10. }

  11. class putRester  //定义一个取出重复元素的类
  12. {
  13.         private Integer[] ig;
  14.         putRester(Integer[] ig)
  15.         {
  16.                 this.ig = ig;
  17.         }
  18.         public void pr()
  19.         {        
  20.                         List<Integer> al = Arrays.asList(ig);  //将数组变成List集合
  21.                         System.out.println(al);
  22.                         ArrayList<Integer> al1 = new ArrayList<Integer>(); //定义一个新的ArrayList集合用于存入取出的元素
  23.                         Iterator<Integer> it = al.iterator();  //用迭代器将集合中的元素取出
  24.                         while(it.hasNext())
  25.                         {       Integer ige = it.next();
  26.                                         if(!(al1.contains(ige)))     //判断一下,新集合里面有没有这个元素。没有才存进去。
  27.                                         {
  28.                                                 al1.add(ige);    //【这里是应该把不包含的元素添加到新集合中吧!】
  29.                                                 //不应该是al1.add(it.next());将元素存入新集合中
  30.                                         }
  31.                         }
  32.                         System.out.println(al1); //显示新集合就完了嘛!【只是查看的话】
  33.                         //Integer[]  ige = al1.toArray(new Integer[10]);  //就是这句,为什么打印出来的是ige的哈希值
  34.                         //System.out.println(ige);
  35.         }
  36. }
复制代码


回复 使用道具 举报
花独恋水 来自手机 中级黑马 2015-3-31 22:51:28
15#
基本数据类型应该打不出来,要打印的话就会像打印int数组一样打印出地址值
回复 使用道具 举报
Integer ige = it.next();//你在这里next()一次
if(!al1.contains(ige))     //判断一下,新集合里面有没有这个元素。没有才存进去。
{
        al1.add(it.next());    //你在这里next()又一次
}

存放的值不一样的哦。
这是我的个人光观点啊。:#

打印对象值,调用toString()方法,默认调用的是Object中的Sting方法,打印的类名@Integer.toHexString(xx.hashCode())
打印的值是Integer数组的话,打印的结果也是调用toString方法
Integer[] i = { 1, 2, 3 };
System.out.println(i);//[Ljava.lang.Integer;@5c1d29c1

回复 使用道具 举报
将这些值试着遍历下看是否OK呢
回复 使用道具 举报
就是Integer没有重写toString或者toString就是跟Object一样的
回复 使用道具 举报
wkz_crystal 发表于 2015-3-31 22:43
你的程序有错误哦,打印是地址值, 不再多说了,想必你已经明白了……因为他是一个对象数组,怎么能直接打 ...

额  我开始也是这样的,的确可以,但是违背我的原意了,我就是想变成数组了在打印的
回复 使用道具 举报
lwj123 发表于 2015-3-31 22:53
Integer ige = it.next();//你在这里next()一次
if(!al1.contains(ige))     //判断一下,新集合里面有没有 ...

恩恩,那个地方是写错了,结果我验证了下是一样的!这么说只有重写toSrting方法?

点评

哥们,Integer是sun自个写的类,你能去重写吗?你想打印出数据,没有必要这个麻烦,来个增强for就可以了  发表于 2015-4-1 08:35
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马