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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fatesabering 中级黑马   /  2014-12-12 16:44  /  1712 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

为什么结果字符串没变化呢

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

9 个回复

倒序浏览
像下面那样就有变化了。。。在你的代码中的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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报 1 0
值得交换应该是数组上的,swap()里面再加一个数组的参数值就可以了
回复 使用道具 举报
亲你为什么不用逆向思维呢?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;
        }
      
      
}
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报 1 0
史云龙 发表于 2014-12-12 16:58
像下面那样就有变化了。。。在你的代码中的swap只是将两个值换了换,也没有返回,更没有对数组进行操作。
...

哦 明白了 谢谢
回复 使用道具 举报
小小志 发表于 2014-12-12 19:16
亲你为什么不用逆向思维呢?public class Test
{
        public static void main(String[] args) {

这样也行啊 恩 多谢大神
回复 使用道具 举报
java里的参数都是值传递,基本数据类型传递他们对应的值,引用数据类型传递他们的地址值。你的swap函数中只是把对应的值 传递给了 x,y 交换也只是x,y交换,这个函数运行完就把x,y给回收了。并不影响数组的顺序。
回复 使用道具 举报
StringBuffer有反转字符串的方法reverse();
回复 使用道具 举报
学习了!!
回复 使用道具 举报
对String类型的字符串改变,是不改变原值的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马