黑马程序员技术交流社区

标题: 求解?关于字符串调换位置的问题? [打印本页]

作者: HeiMaYSL    时间: 2012-5-10 10:09
标题: 求解?关于字符串调换位置的问题?
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反转,怎么做?

作者: 韩慧阳    时间: 2012-5-10 10:35
   //定义反转方法
                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 10:36
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);
          }

}
作者: 徐然    时间: 2012-5-10 11:04
问题出在反转方法里
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是字符串从末位置除空格后的下标
                        }
                }


作者: 周素强    时间: 2012-5-10 11:14
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);//返回换位后的字符串
        }
}





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