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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 lzhuas 于 2014-4-19 21:20 编辑

/**把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
* 接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
* 得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
*/
import java.util.*;
public class LanQiao{
        public static newToOld(List<String> l1){
                List<String> l2 =new ArrayList<String>();
                l2 = l1;
                System.out.println("listsize21::"+l2.size());
                while(l2.size()>1){
                        l2 = l1;
                        l1.clear();
                        for(int x = 0;x<l2.size();x++){
                                l1.add(l2.get(x+1));
                        }
                }
        }
        public static void main(String[] args){
                List<String> list =new ArrayList<String>();
                for(int x=1;x<=106;x++){
                        for(char y= 'a';y<='s';y++)
                                list.add(Character.toString(y));
                }
                System.out.println(list);
                System.out.println("listsize::"+list.size());
                newToOld(list);
                System.out.println("listsize::"+list.size());
                System.out.println(list);
        }
}

本来想用List弄弄来着,想不到被它弄了我,黑马的朋友们,救救我

6 个回复

倒序浏览
  1. package Test;
  2. import java.util.*;
  3. public class LanQiao{
  4.          //你原来的方法      你没写返回值
  5.          public static void newToOld1(List<String> l1){
  6.                  List<String> l2 =new ArrayList<String>();//引用类型
  7.                  l2 = l1;
  8.                  System.out.println("listsize21::"+l2.size());
  9.                  while(l2.size()>1){
  10.                          l2 = l1;
  11.                          l1.clear();// l1,l2指向同一个地址,你把l1清空了不就相当于把l2清空了
  12.                          for(int x = 0;x<l2.size();x++){
  13.                                  l1.add(l2.get(x+1));//这里直接把奇数位置一处不就可以了吗
  14.                          }
  15.                  }
  16.          }
  17.           //修改后的方法
  18.          public static void newToOld(List<String> l1){
  19.              System.out.println("listsize21::"+l1.size());
  20.              while(l1.size()>1){
  21.                      for(int x = 1;x<l1.size();x++){
  22.                             //这里直接把奇数位置移除不就可以了吗,不过有一点得注意,ArrayList删除 一个元素的话,后面的元素会索引向前移
  23.                             //比如说索引123 把2删了,3会自动变 成2   所以每删除一个就会往前移动一个位置,所以我们只需要每次加1 然后加上偏移的一个位置,就正好了
  24.                             //下面打印出来,方便看效果
  25.                              System.out.println(l1.remove(x)+"  "+x);
  26.                      }
  27.              }
  28.      }
  29.          public static void main(String[] args){
  30.                  List<String> list =new ArrayList<String>();
  31.                  for(int x=1;x<=106;x++){
  32.                          for(char y= 'a';y<='s';y++)
  33.                                  list.add(Character.toString(y));
  34.                  }
  35.                  System.out.println(list);
  36.                  System.out.println("listsize::"+list.size());
  37.                  newToOld(list);
  38.                  System.out.println("listsize::"+list.size());
  39.                  System.out.println(list);
  40.          }
  41. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报

非常感谢!我技术没到家,见笑了
回复 使用道具 举报

for遍历里那个应该是int x=0;才对。还是谢谢你哦
回复 使用道具 举报
lzhuas 发表于 2014-4-19 22:09
非常感谢!我技术没到家,见笑了

你说我写的for里面应该是int x=0是吗?
你想想,如果是0,第一次进入循环 ,第一个删除的不就是索引0 吗?那就不是奇数了
因为它是第一次删除的元素,删除它之后才出现后面元素索引往前移的现象
  System.out.println(l1.remove(x)+"  "+x);//看看这行代码打印的结果
    b   1
    d   2
虽然索引好像是每次只加1 但是还有索引往前移动了一个位置,正好是2,你可以直接看左边的字符
a b c d e  f       正好删的就是  b   d     e    f     g   ......
回复 使用道具 举报
⒈心只霸占沵 发表于 2014-4-19 22:28
你说我写的for里面应该是int x=0是吗?
你想想,如果是0,第一次进入循环 ,第一个删除的不就是索引0 吗 ...

List里底层是数组结构,跟数组一样,角标0才是第一个,我验证过了,要是1 的话,a永远都去不掉
回复 使用道具 举报
lzhuas 发表于 2014-4-19 23:16
List里底层是数组结构,跟数组一样,角标0才是第一个,我验证过了,要是1 的话,a永远都去不掉 ...

看了一下你的题,是我看错题了,我理解为索引为奇数的要删除了,抱歉了啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马