黑马程序员技术交流社区

标题: 加密问题 [打印本页]

作者: 帮助信息    时间: 2015-11-22 11:23
标题: 加密问题
  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]


作者: a2300538    时间: 2015-11-22 11:23
帮助信息 发表于 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);
        }
}

作者: 帮助信息    时间: 2015-11-22 11:56
有人吗有人吗有人吗有人吗有人吗有人吗有人吗有人吗有人吗有人吗有人吗
作者: a2300538    时间: 2015-11-22 11:56
33 34行的代码交换顺序  38  39前加上 if(j<list.size())   你的remove语句放在内循环里了   也就是你在添加 b,c,d的时候list会慢慢变短....
作者: 帮助信息    时间: 2015-11-22 12:00
a2300538 发表于 2015-11-22 11:56
33 34行的代码交换顺序  38  39前加上 if(j

jia加if语句干嘛,,,没看明白{:3_50:}
作者: a2300538    时间: 2015-11-22 12:00

亲测可用!
作者: a2300538    时间: 2015-11-22 12:07
帮助信息 发表于 2015-11-22 12:00
jia加if语句干嘛,,,没看明白

例如~  你的字符串最后一位恰巧也是字母的话.你的remove语句已经把j最后为的值干掉了...  那时你再执行39行的list.get(j) 一定会越界的啊
作者: a2300538    时间: 2015-11-22 12:11
帮助信息 发表于 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 12:58
兄弟 解决了么? 如果解决了 你看看左上角金闪闪的东西是不是~~

你能把具体代码给我吗,,,,,,,,,,,
作者: a2300538    时间: 2015-11-22 14:02
帮助信息 发表于 2015-11-22 13:52
你能把具体代码给我吗,,,,,,,,,,,

你那种格式是怎么发的啊... 我怎么没找到...
作者: 帮助信息    时间: 2015-11-22 14:05
a2300538 发表于 2015-11-22 13:57
??   就是我说的改那两个地方啊... 还是你的代码
package com.lmh.text;

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

加了那一句之后,运行不能通过啊。 你看看是什么原因,帮我调试一下
作者: a2300538    时间: 2015-11-22 14:08
帮助信息 发表于 2015-11-22 14:05
35行是
加了那一句之后,运行不能通过啊。 你看看是什么原因,帮我调试一下 ...

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

不对啊 兄弟... 你耍我..  我没提到过35行啊
就是加在
list1.add(list.get(j)); 这句话的上面   只有你remove之后 在外循环才会越界啊   
作者: 帮助信息    时间: 2015-11-22 14:13
a2300538 发表于 2015-11-22 14:12
不对啊 兄弟... 你耍我..  我没提到过35行啊
就是加在
list1.add(list.get(j)); 这句话的上面   只有你re ...

加QQ506446451
作者: 帮助信息    时间: 2015-11-22 14:15
a2300538 发表于 2015-11-22 14:12
不对啊 兄弟... 你耍我..  我没提到过35行啊
就是加在
list1.add(list.get(j)); 这句话的上面   只有你re ...

  ,,!好了。 刚才有个小地方弄错了
作者: 袁有福123    时间: 2015-11-22 21:20
看起来感觉很复杂的样子!有点不懂
作者: 帮助信息    时间: 2015-11-29 15:20
还是要评论一下





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2