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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HeiMaYSL 中级黑马   /  2012-5-10 10:09  /  1783 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class test2
{
                //定义某个字符串的打印方法。
                public static void sop(String str)
                {
                         System.out.println(str);
                }

        public static void main(String[] args)
        {
                        String s="     ab cd      ";
                        sop("("+s+")");   //打印没有去掉空格的字符串
               
                  
                        sop("("+fanzhuan(s,6,7)+")");  
        }

                public static String fanzhuan(String st,int start,int end)
                {
                        //字符串变数组
                        char[] chs=st.toCharArray();
                        //反转数组
                        reverse(chs,start,end);  //调用反转方法。 start 调转字符的开始下标,end是结束下标
                       
                        return new String(chs);//将数组变成字符串。
                }

                public static String fanzhuan(String s)
                {
                        return "";
                }

               
               

                //定义反转方法
                private static void reverse(char[] arr,int x,int y)
                {
                        for (int start=x,end=y-1;start<end;start++,end--)  //注意包含头,不包含尾。因为长度-1,就是最后一个下标。所以,end=y-1;
                        {
                                swap(arr,start,end);   //arr是传入的字符串转换成的数组,
                                     //start是字符串从开始位置除空格后的下标,end是字符串从末位置除空格后的下标
                        }
                }

       
                //换位方法,注意用第三方变量。
                private static void swap(char[] arr,int x,int y)
                {
                        char temp=arr[x];   //把传入的数组的下标值,赋给第三方变量
                        arr[x]=arr[y];      
                        arr[y]=temp;        
                }
}


问:这段代码是为了让字符串改变位置,如:sop("("+fanzhuan(s,6,7)+")");就是改变s这个字符串,从下标为6到7的字符转换一下位置?
怎么转换不了呢?求解啊?如果我想让字符串s里的a和b反转,怎么做?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
   //定义反转方法
                private static void reverse(char[] arr,int x,int y)
                {
                        for (int start=x,end=y;start<end;start++,end--)  //注意包含头,不包含尾。因为长度-1,就是最后一个下标。所以,end=y-1;
                     //这里的问题。    这里没有注意包含头不包含尾的啊。方法都是你自己定义的。  y没有必要-1,如果-1那你传入的是x和y是6和7,start和end就相等了,所以for循环不满足条件啊,当然就不交换了啊
                        {
                                swap(arr,start,end);   //arr是传入的字符串转换成的数组,
                                     //start是字符串从开始位置除空格后的下标,end是字符串从末位置除空格后的下标
                        }
                }

点评

哦了,问题已解决。  发表于 2012-5-10 11:55

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public class DemoHeima {
          public static void main(String[] args)
      {
                 System.out.println( FanZhuan("abc",1,2));
       }
          public static String FanZhuan(String ss,int index,int onIndex){
                  char[] chars=ss.toCharArray();
               
                        char temp=chars[index];
                         chars[index]=chars[onIndex];
                         chars[onIndex]= temp;
               
                  return new String(chars);
          }

}
回复 使用道具 举报
问题出在反转方法里
private static void reverse(char[] arr,int x,int y)
                {
                        for (int start=x,end=y-1;start<end;start++,end--)  //注意包含头,不包含尾。因为长度-1,就是最后一个下标。所以,end=y-1;
                        {                                 用于反转的方法,为什么包含头不包含尾呢,你传入的x是6,y是7,那你y-1不就是6了,6和6反转有意义吗,当然不能发转成功,把包含头不包含尾去掉,反转不需要
                                swap(arr,start,end);   //arr是传入的字符串转换成的数组,
                                     //start是字符串从开始位置除空格后的下标,end是字符串从末位置除空格后的下标
                        }
                }

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class CharRep
{
        public static void main(String[] args)
        {
                System.out.println(rep("Hello World!",'H','W'));
        }
        public static String rep(String str,char a,char b)
        {
                int x = str.indexOf(a);//获取a字符在字符串中的位置
                int y = str.indexOf(b);//获取b字符在字符串中的位置
                char[] ch = str.toCharArray();//将字符串转成字符数组
                char temp = ch[x];//进行换位
                ch[x] = ch[y];
                ch[y] = temp;
                return new String(ch);//返回换位后的字符串
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马