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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 枫儿 金牌黑马   /  2013-10-25 10:45  /  1556 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么编译会提示软件包不存在,大家帮忙看看代码
  1. import java.util.*;
  2. class Arraylist
  3. {
  4.         public static void sop(Object obj)
  5.         {
  6.                 System.out.println(obj);
  7.         }
  8.         public static void main(String[] args)
  9.         {
  10.                 ArrayList al=new ArrayList();
  11.                 al.add("java01");
  12.                 al.add("java02");
  13.                 al.add("java01");
  14.                 al.add("java02");
  15.                 al.add("java01");
  16.                 al.add("java03");

  17.                 sop(al);
  18.                 al=qccf(al);
  19.                 sop(al);
  20.         }
  21.         public static ArrayList qccf(ArrayList al)
  22.         {
  23.                 ArrayList newal=ArrayList;
  24.                 Iterator it=new al.iterator();
  25.                 while(it.hasNext())
  26.                 {
  27.                         Object obj=it.next();
  28.                         if(!newal.contains(obj))
  29.                                 newal.add(obj);

  30.                
  31.                 }
  32.                 return newal;
  33.         }
  34. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

8 个回复

正序浏览
package com.itheima;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayList1 {
                public static void sop(Object obj)
                {
                        System.out.println(obj);
                }
                public static void main(String[] args)
                {
                        ArrayList al=new ArrayList();
                        al.add("java01");
                        al.add("java02");
                        al.add("java01");
                        al.add("java02");
                        al.add("java01");
                        al.add("java03");

                        sop(al);
                        al=qccf(al);
                        sop(al);
                }
                public static ArrayList qccf(ArrayList al)
                {
                        ArrayList newal=new ArrayList();
                        Iterator it=al.iterator();
                        while(it.hasNext())
                        {
                                Object obj=it.next();
                                if(!newal.contains(obj))
                                        newal.add(obj);

                        
                        }
                        return newal;
                }
        }

楼主这次你复制我的代码运行一下肯定正确。
首先指出一下你代码中的错误
Iterator it=new al.iterator(); 把new关键字去掉
还有 ArrayList newal=ArrayList; 创建newal实例错误应该为ArrayList newal=new ArrayList();
这两处错误,我认为你是发帖时的错误。其实代码没有什么问题。

但是为什么编译会提示软件包不存在?
原因就在于你定义的类名和import java.util.ArrayList;工具类的工具类ArrayList重名,
jvm虚拟机不知道调用哪个类所以会造成调用的不确定性。
正确做法是:定义类名最好不要和java包中提供的工具类名相同,这样就能导入包了。
            如果自己非要和java包中提供的工具类名相同,那么自己定义一个自己的开发包,然后实现该类
            的方法和功能,这样就可以使用自己定义的工具类,不用使用系统自带的工具类了。
希望能帮助您。



评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
第24行 ArrayList newal=ArrayList; 改为ArrayList newal=new ArrayList(); //创建一个新的集合对象。
第25行 Iterator it=new al.iterator(); 改为Iterator it=al.iterator(); //iterator()方法返回的是一个实现Iterator接口的子类对象,不需要new。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
hurryup 高级黑马 2013-10-25 12:52:53
7#
写错了 ,改一下就可以了
24行,ArrayList newal=new ArrayList();//少个new 和括号
  25行              Iterator it=al.iterator();//这儿多个new

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
import java.util.*;
class Test1
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                ArrayList al=new ArrayList();
                al.add("java01");
                al.add("java02");
                al.add("java01");
                al.add("java02");
                al.add("java01");
                al.add("java03");
                               
                sop(al);
                                //下面语句是重新为al赋值。
                //al=qccf(al);
                                //sop(al);
                                qcxt(al);
                                sop(al);
        }
                //需要注意的是这个方法返回的是一个新的集合,如果你不加al=qccf(al)打印al,打印出的还是原集合。
        public static ArrayList qccf(ArrayList al)
        {
                //ArrayList newal=ArrayList;
                                ArrayList newal = new ArrayList();
                Iterator it=al.iterator();
                while(it.hasNext())
                {
                        Object obj=it.next();
                        if(!newal.contains(obj))
                                newal.add(obj);

               
                }
                return newal;
        }
                //这个是我新写的方法,返回的是原集合
                public static ArrayList qcxt(ArrayList al)
                {
                        //该方法为从原ArrayList集合中直接移除
                        for (int x = 0;x < al.size() ;x++ )
                        {
                                Object obj = al.get(x);
                                //因为al.get()方法返回的是obj类型,这里需要强转。
                                String s =(String)obj;
                                //y=x+1,判断x后有无与x相同元素
                                for (int y = x+1;y<al.size() ;y++ )
                                {
                                        Object obj1 = al.get(y);
                                        String s1 = (String)obj1;
                                        //判断有无相同元素.
                                        if (s.equals(s1))
                                        {
                                                //这里有一点疑惑,当移除后al.size()是否会变化。
                                                al.remove(y);
                                        }
                                }
                        }
                        return al;
                }
}

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
寻丶丶觅 发表于 2013-10-25 11:02
楼主是想去除集合中相同元素吧 貌似是定义问题
       public static ArrayList qccf(ArrayList al)
       ...

哥们 谢谢解答,Iterator it =al.iterator  这步的new 很难察觉出
回复 使用道具 举报
1961993790 发表于 2013-10-25 10:58
public static void main(String[] args) {
                ArrayList al = new ArrayList();

错误提示如图,是找不到主函数调用的al
回复 使用道具 举报
楼主是想去除集合中相同元素吧 貌似是定义问题
       public static ArrayList qccf(ArrayList al)
        {
               // ArrayList newal=ArrayList;
                //新建一个ArrayList集合,你原来的语句编写错误
                ArraylList newal = new ArrayList();
                //Iterator it=new al.iterator();
                 Iterator it = al.iterator();//iterator()方法返回的是一个实现Iterator接口的子类对象。不需要new。
                while(it.hasNext())
                {
                        Object obj=it.next();
                        if(!newal.contains(obj))
                                newal.add(obj);

               
                }
                return newal;

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
public static void main(String[] args) {
                ArrayList al = new ArrayList();

                al.add("java01");
                al.add("java02");
                al.add("java01");
                al.add("java02");
                al.add("java01");
                al.add("java03");
                sop(al);
                al = qccf(al);
                sop(al);

        }

        public static void sop(ArrayList arrayList)

        {
                // System.out.println(obj);
                for (int i = 0; i < arrayList.size(); i++) {
                        System.out.println(arrayList.get(i));
                }

        }

        public static ArrayList qccf(ArrayList al)

        {

                ArrayList newal = new ArrayList();

                Iterator it = al.iterator();

                while (it.hasNext())

                {
                        Object obj = it.next();
                        if (!newal.contains(obj))
                                newal.add(obj);

                }

                return newal;
        }

                       {
                                Object obj=it.next();
                               if(!newal.contains(obj))
                                  newal.add(obj);           

                       }

                       return newal;
       }
这样应该是正确的,你的错误代码应该是在第24行  ArrayList newal=ArrayList;
正确的是: ArrayList al=new ArrayList();
sop()这个方法输出语句应该为我修改后的代码;
希望能帮助你。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马