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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 帮助信息 中级黑马   /  2015-11-22 11:23  /  3062 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

3黑马币
  1. package zif字符串加密;

  2. import java.util.ArrayList;

  3. /*
  4. * 把一个字符串234a96n-->234bcd96opq
  5. * \
  6. * 思路:把原有的字母变成其后三位的字母
  7. *
  8. * 步骤:
  9. *         1.先把字符串添加到集合众
  10. *         2.然后再把集合取出来,如果是数字就直接取来 并存到心集合中,如果是字母的话,就把字母变成新字母拼接,并放到新集合中
  11. *         3.最后遍历集合
  12. */
  13. public class demo {
  14.         public static void main(String[] args) {
  15.                 //设定字符串,并存到集合
  16.                 String s="234a96n";
  17.                 ArrayList<Character> list=new ArrayList<>();
  18.                 char[]cha=s.toCharArray();
  19.                 for (int i = 0; i < cha.length; i++) {
  20.                         list.add(cha[i]);
  21.                 }
  22.                 System.out.println("第一次"+list);
  23.                 System.out.println((char)(list.get(3)+1));
  24.                 char a=(char) (list.get(3)+2);
  25.                 System.out.println(a);
  26.                
  27.                 ArrayList<Character> list1=new ArrayList<>();
  28.                 for(int j=0;j<list.size();j++){
  29.                         if(list.get(j)>='a'&&list.get(j)<='z'){
  30.                                 char[] c1={(char)(list.get(j)+1),(char)(list.get(j)+2),(char)(list.get(j)+3)};
  31.                                 for(int i =0;i<c1.length;i++){
  32.                                         list.remove(list.get(j));
  33.                                         list1.add(c1[i]);
  34.                                 }
  35.                                
  36.                         }
  37.                         list1.add(list.get(j));
  38.                 }
  39.                 System.out.println(list1);
  40.         }
  41. }
复制代码
这是那一步错了呢。  为什么这样的结果输出后是 [2, 3, 4, b, c, d, n]

最佳答案

查看完整内容

?? 就是我说的改那两个地方啊... 还是你的代码 package com.lmh.text; import java.util.ArrayList; /* * 把一个字符串234a96n-->234bcd96opq * \ * 思路:把原有的字母变成其后三位的字母 * * 步骤: * 1.先把字符串添加到集合众 * 2.然后再把集合取出来,如果是数字就直接取来 并存到心集合中,如果是字母的话,就把字母变成新字母拼接,并放到新集合中 * 3.最后遍历集合 */ public cla ...

17 个回复

倒序浏览
帮助信息 发表于 2015-11-22 13:52
你能把具体代码给我吗,,,,,,,,,,,

??   就是我说的改那两个地方啊... 还是你的代码
package com.lmh.text;

import java.util.ArrayList;

/*
* 把一个字符串234a96n-->234bcd96opq
* \
* 思路:把原有的字母变成其后三位的字母
*
* 步骤:
*         1.先把字符串添加到集合众
*         2.然后再把集合取出来,如果是数字就直接取来 并存到心集合中,如果是字母的话,就把字母变成新字母拼接,并放到新集合中
*         3.最后遍历集合
*/
public class demo {
        public static void main(String[] args) {
                //设定字符串,并存到集合
                String s="234a96n";
                ArrayList<Character> list=new ArrayList<>();
               
                char[]cha=s.toCharArray();
                for (int i = 0; i < cha.length; i++)
                {
                        list.add(cha);
                }
                char a=(char) (list.get(3)+2);
                System.out.println("加密后前:"+list);
                ArrayList<Character> list1=new ArrayList<>();
                for(int j=0;j<list.size();j++){
                        if(list.get(j)>='a'&&list.get(j)<='z'){
                                char[] c1={(char)(list.get(j)+1),(char)(list.get(j)+2),(char)(list.get(j)+3)};
                                list.remove(list.get(j));
                                for(int i =0;i<c1.length;i++){
                                       list1.add(c1);
                                }
                        }
                        if(j<list.size())
                        list1.add(list.get(j));
                }
                System.out.println("加密后:"+list1);
        }
}
回复 使用道具 举报
有人吗有人吗有人吗有人吗有人吗有人吗有人吗有人吗有人吗有人吗有人吗
回复 使用道具 举报
33 34行的代码交换顺序  38  39前加上 if(j<list.size())   你的remove语句放在内循环里了   也就是你在添加 b,c,d的时候list会慢慢变短....
回复 使用道具 举报
a2300538 发表于 2015-11-22 11:56
33 34行的代码交换顺序  38  39前加上 if(j

jia加if语句干嘛,,,没看明白{:3_50:}
回复 使用道具 举报

亲测可用!
回复 使用道具 举报
帮助信息 发表于 2015-11-22 12:00
jia加if语句干嘛,,,没看明白

例如~  你的字符串最后一位恰巧也是字母的话.你的remove语句已经把j最后为的值干掉了...  那时你再执行39行的list.get(j) 一定会越界的啊
回复 使用道具 举报
帮助信息 发表于 2015-11-22 12:00
jia加if语句干嘛,,,没看明白

举例子   字符串 12345a   list长度为6  最大index为5      31行判断成功时  j=5   执行33行remove(按我说的调换之后)  list变为12345 长度为5  最大index 为4 再执行39行 后面的list.get(j)  j是5  越界  挂掉~  
回复 使用道具 举报
兄弟 解决了么? 如果解决了 你看看左上角金闪闪的东西是不是~~
回复 使用道具 举报
a2300538 发表于 2015-11-22 12:58
兄弟 解决了么? 如果解决了 你看看左上角金闪闪的东西是不是~~

你能把具体代码给我吗,,,,,,,,,,,
回复 使用道具 举报
帮助信息 发表于 2015-11-22 13:52
你能把具体代码给我吗,,,,,,,,,,,

你那种格式是怎么发的啊... 我怎么没找到...
回复 使用道具 举报
a2300538 发表于 2015-11-22 13:57
??   就是我说的改那两个地方啊... 还是你的代码
package com.lmh.text;

35行是
  1. list1.add(c1[i])吧
复制代码

加了那一句之后,运行不能通过啊。 你看看是什么原因,帮我调试一下
回复 使用道具 举报
帮助信息 发表于 2015-11-22 14:05
35行是
加了那一句之后,运行不能通过啊。 你看看是什么原因,帮我调试一下 ...

.....   好吧... 39行之前... 我看错了  sorry sorry     我给你那个代码能用 的  调试过的
回复 使用道具 举报
帮助信息 发表于 2015-11-22 14:05
35行是
加了那一句之后,运行不能通过啊。 你看看是什么原因,帮我调试一下 ...

不对啊 兄弟... 你耍我..  我没提到过35行啊
就是加在
list1.add(list.get(j)); 这句话的上面   只有你remove之后 在外循环才会越界啊   
回复 使用道具 举报
a2300538 发表于 2015-11-22 14:12
不对啊 兄弟... 你耍我..  我没提到过35行啊
就是加在
list1.add(list.get(j)); 这句话的上面   只有你re ...

加QQ506446451
回复 使用道具 举报
a2300538 发表于 2015-11-22 14:12
不对啊 兄弟... 你耍我..  我没提到过35行啊
就是加在
list1.add(list.get(j)); 这句话的上面   只有你re ...

  ,,!好了。 刚才有个小地方弄错了
回复 使用道具 举报
看起来感觉很复杂的样子!有点不懂
回复 使用道具 举报
还是要评论一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马