黑马程序员技术交流社区

标题: 反转字符串疑问 [打印本页]

作者: fatesabering    时间: 2014-12-12 16:44
标题: 反转字符串疑问
  1. package java01;

  2. public class day1212 {
  3.         public static void main(String[] args) {
  4.                 String s = "abcdefg";
  5.                 System.out.println(reverseString(s));
  6.         }
  7.         public static String reverseString(String s)
  8.         {
  9.                 char[] arr = s.toCharArray();
  10.                 for(int x=0; x<arr.length/2; x++)
  11.                 {
  12.                         swap(arr[x],arr[arr.length-1-x]);
  13.                 }
  14.                 return new String(arr);
  15.         }
  16.         public static void swap(char x, char y)
  17.         {
  18.                 char temp=x;
  19.                 x=y;
  20.                 y=temp;
  21.         }
  22. }
复制代码

为什么结果字符串没变化呢
作者: 史云龙    时间: 2014-12-12 16:58
像下面那样就有变化了。。。在你的代码中的swap只是将两个值换了换,也没有返回,更没有对数组进行操作。
所以数组是不会有变化的。

  1. public class Test
  2. {
  3.         public static void main(String[] args) {
  4.                 String s = "abcdefg";
  5.                 System.out.println(reverseString(s));
  6.         }
  7.         public static String reverseString(String s)
  8.         {
  9.                 char[] arr = s.toCharArray();
  10.                 for(int x=0; x<arr.length/2; x++)
  11.                 {
  12.                         swap(x,arr.length-1-x,arr);
  13.                 }
  14.                 return new String(arr);
  15.         }
  16.         public static void swap(int x, int y,char[] arr)
  17.         {
  18.                                 char temp =arr[x];
  19.                                 arr[x]= arr[y];
  20.                                 arr[y]=temp;
  21.         }
  22. }
复制代码

作者: 我只是一只菜鸟    时间: 2014-12-12 17:06
值得交换应该是数组上的,swap()里面再加一个数组的参数值就可以了
作者: 小小志    时间: 2014-12-12 19:16
亲你为什么不用逆向思维呢?public class Test
{
        public static void main(String[] args) {
                String s = "abcdefg";
                System.out.println(reverseString(s));
        }
        public static String reverseString(String s)
        {         String  temp="";
                char[] arr = s.toCharArray();
                for(int x=arr.length; x>=0; x--)
                {
                       temp+=arr[x];
                }
                return temp;
        }
      
      
}
复制代码

作者: fatesabering    时间: 2014-12-13 14:31
史云龙 发表于 2014-12-12 16:58
像下面那样就有变化了。。。在你的代码中的swap只是将两个值换了换,也没有返回,更没有对数组进行操作。
...

哦 明白了 谢谢
作者: fatesabering    时间: 2014-12-13 14:33
小小志 发表于 2014-12-12 19:16
亲你为什么不用逆向思维呢?public class Test
{
        public static void main(String[] args) {

这样也行啊 恩 多谢大神
作者: cvnmklop    时间: 2014-12-13 14:51
java里的参数都是值传递,基本数据类型传递他们对应的值,引用数据类型传递他们的地址值。你的swap函数中只是把对应的值 传递给了 x,y 交换也只是x,y交换,这个函数运行完就把x,y给回收了。并不影响数组的顺序。
作者: HelloWorld!    时间: 2014-12-13 14:59
StringBuffer有反转字符串的方法reverse();
作者: lidinghai    时间: 2014-12-13 15:44
学习了!!
作者: lishuliang28    时间: 2014-12-13 19:37
对String类型的字符串改变,是不改变原值的




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