首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

哪位高手能帮帮小弟我!ArrayList

2012-01-05 
谁能帮帮我!!ArrayList! importjava.util.*importjava.text.*publicclassPubMet{StringPubMethodpublic

谁能帮帮我!!ArrayList!

import   java.util.*;
import   java.text.*;

public   class   PubMet{
String   PubMethod;
  public   PubMet()
  {
  }

  public   static   int   JudgeMet2(String   UserPub,String   CoPub)
{
  List       UP   =   new       ArrayList();      
for(StringTokenizer   UParr=new   StringTokenizer(UserPub, ", ");UParr.hasMoreTokens();)    
  {      
                    UP.add(UParr.nextToken());      
    }
  String   CP=CoPub;

    for(int   ii=0;ii <UP.size();ii++)
    {
                  if   (CP.indexOf(UP.get(ii).toString())!=-1)
  {
                  return(0);
    }
    }
    return(1);
        }


  public   static   ArrayList   JudgeMet4(String   UserPub)
{
  List       UP   =   new       ArrayList();      
for(StringTokenizer   UParr=new   StringTokenizer(UserPub, ", ");UParr.hasMoreTokens();)    
  {      
                    UP.add(UParr.nextToken());      
    }
  ArrayList   CoPub=new   ArrayList();
  ArrayList   pub1=new   ArrayList();
  pub1.add( "A ");
  pub1.add( "B ");
  ArrayList   pub2=new   ArrayList();
  pub2.add( "C ");
  pub2.add( "D ");
  ArrayList   pub3=new   ArrayList();
  pub3.add( "E ");
  pub3.add( "F ");
  ArrayList   pub4=new   ArrayList();
  pub4.add( "G ");
  pub4.add( "H ");
  CoPub.add(pub1);
  CoPub.add(pub2);
  CoPub.add(pub3);
  CoPub.add(pub4);
        for(int   s=CoPub.size();--s> 0;)
{
      for   (int   i=0;((List)CoPub.get(s)).size()> 0   &&   i <((List)CoPub.get(s)).size();   i++)
      {
          for(int   ii=0;ii <UP.size();ii++)
  {
        if(UP.get(ii).equals(((List)CoPub.get(s)).get(i)))
{
    CoPub.remove(s);
    break;
}
  }
      }

}
    return(CoPub);
        }



  public   static   void   main(String[]   args)
  {
      String   test= "A,B,C,D, ";//用这个字符串测试能够通过
      //String   test= "A,B,C,D,E,F,G, ";//用这个字符串测试不能通过
      ArrayList   a=new   ArrayList();
      a=JudgeMet4(test);
      System.out.println(a.size());
    System.out.println(((List)a.get(0)).get(1));
  }

}

------解决方案--------------------


既然解决了,我就不贴程序了。
问题的根源在于你对List的不正确使用,在遍历一个List的时候,不推荐删除的操作,因为一旦删除,List的size就变化了,这样作为下标的循环变量可能就会超过List的size,也就是越界了。所以如果要在遍历的时候删除元素,一定要注意下标的问题。
[解决办法]
1# for(int s=CoPub.size();--s> 0;){
2# for (int i=0;((List)CoPub.get(s)).size()> 0 && i <((List)CoPub.get(s)).size(); i++){
3# Test: //跳出循环到这里!
4# for(int ii=0;ii <UP.size();ii++) {
5# if(UP.get(ii).equals(((List)CoPub.get(s)).get(i))) {
6# CoPub.remove(s);
7# break Test;//以前少跳一级
8# }
9# }
10# }
11#}
分析:
2#有问题:
这个循环的初始条件i=0,终止条件CoPub.get(s).size()> 0&&i <CoPub.get(s).size()> 0
你在看看6#,每次发现相等的都要从CoPub删掉,也就是说CoPub的长度一直再变!
当你删掉后CoPub.get(s)不能保证能得到结果,也就是CoPub.size <s,这样就出现了错误!
你的测试1没出现CoPub.size <s单测试2的数据数现了这种情况!
改进方式:
单独创建一个List保存相同的元素,最后整体删除:
1#前加一句:ArrayList temp = new ArrayList();
6#改:temp.add(CoPub.get(s));
11#后加一句:CoPub.remove(temp);

这种改法只能保证程序没问题,不保证结果正确,
因为没看明白你的程序要做什么!~

热点排行