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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 神之梦 于 2013-6-10 13:17 编辑

直接上代码好了,这是在基础视频中老师出的小练习,后来找了下,发现好像老师没有讲怎么去实现。然后自己用非常愚蠢的方法没有成功,看了玉圣的思路后,自己做了下。期间发现代码会出现角标越界的可能,稍微改下代码已经可以完美实现了,现与大家共享下。。。。。
肯定还有不同的思路,如果还有更简单的思路,望大家分享。
  1. /*
  2. 需求:使用Collections中的方法fill对List集合中的部分元素进行替换
  3. 思路:1、将List集合中要替换的部分元素取出,并存入另一集合中
  4.           2、将原集合中的要替换元素移除
  5.           3、用fill将要替换的元素进行替换
  6.           4、将取出的部分增加进集合
  7. */
  8. import java.util.*;
  9. class  FillTest
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 List<String> list = new ArrayList<String>();

  14.                 list.add("abc");
  15.                 list.add("ab");
  16.                 list.add("abcd");
  17.                 list.add("a");
  18.                 list.add("abcde");

  19.                 try
  20.                 {
  21.                         fillSome(list,1,5,"shenma");
  22.                 }
  23.                 catch (InputException e)
  24.                 {
  25.                         System.out.println(e.toString());
  26.                 }
  27.                 System.out.println(list);
  28.         }
  29. //替换部分元素方法
  30.         public static void fillSome(List<String> list,int start,int end,String s)throws InputException
  31.         {
  32.                 if(start>=end)
  33.                         throw new InputException("没有要替换的元素");//如果输入的end小于或者等于start,则抛出异常

  34.                 //定义一个新集合
  35.                 List<String> li=new ArrayList<String>();

  36.                 //因为每移除一次,后面的元素就会补上,所以这里用y来控制次数
  37.                 for (int x=start,y=start;y<end ; y++)
  38.                 {
  39.                         li.add(list.get(x));//将需要替换的元素增加到新集合
  40.                         list.remove(x);//移除需要替换的元素
  41.                 }
  42.                
  43.                 Collections.fill(li,s);//替换成需要的元素s
  44.                
  45.                 list.addAll(start,li);//将替换的部分增加进原集合
  46.         }

  47. }

  48. //自定义异常
  49. class InputException extends Exception
  50. {
  51.         InputException(String Massage)
  52.         {
  53.                 super(Massage);
  54.         }
  55. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

5 个回复

正序浏览
  1. for (int x=start,y=start;y<end ; y++)
  2.                 {
  3.                         li.add(list.get(x));//将需要替换的元素增加到新集合
  4.                         list.remove(x);//移除需要替换的元素
  5.                 }
复制代码
这里面的x,y到底起什么作用?x应该也自增吧,我按照您的代码写的,结果出现错误了

回复 使用道具 举报
真不错,还有异常的处理,给力
回复 使用道具 举报

黑马帝啊,膜拜
回复 使用道具 举报
灰常给力
回复 使用道具 举报
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马