黑马程序员技术交流社区

标题: 字符串翻转的代码,只能全部翻转,不能局部翻转?求指教 [打印本页]

作者: 山鹰    时间: 2013-6-3 18:02
标题: 字符串翻转的代码,只能全部翻转,不能局部翻转?求指教
可以全部返回转,怎么不可以局部翻转?哪里的问题?
public class StringDemo {
/*
* 字符串翻转
* 1.将字符串变成数组
* 2.对数组翻转
* 3.将数组变成字符串
*/
       
        public static void main(String[] args) {
       
                String str = "abcd efgh";
                System.out.println(reverseString(str,0,1));//怎么不可以局部翻转
               
        }
        public static String reverseString(String s,int start,int end){
                char[] chars = s.toCharArray();
                reverse(chars,start,end);
                return (new String(chars));
        }
       
        public static String reverseString(String s){
               
                return reverseString (s,0,s.length());
        }
       
        private static void reverse(char[] arr, int x, int y) {
                for(int start=x,end=y-1;start<end;start++,end--){
                        swap(arr,start,end);
                }
        }
       
        private static void swap(char[] arr, int x, int y) {
                char temp = arr[x];
                arr[x] = arr[y];
                arr[y] = temp;
        }

}
作者: 飞鸟青崖    时间: 2013-6-3 18:13

你的reverse方法中,start = x,end = y-1;所以当你调用reverseString(str,0,1));时,传入到reverse方法中时,start和end都是0.指向的是同一个位置,翻转之后没有任何变化。如果你调用reverseString(str,0,2));你就会发现翻转了。
作者: lxf_cat5277    时间: 2013-6-3 18:17
reverseString(str,0,1)和
private static void reverse(char[] arr, int x, int y) {
                for(int start=x,end=y-1;start<end;start++,end--){
                        swap(arr,start,end);
                }
        }
中的end=y-1这里出现了问题,for(int start = 0, end =0;start<end;start++,end--)
你的start从0开始end为1时再减1是没有意义的。
作者: 王瀛    时间: 2013-6-3 18:24
在对操作域进行设定的时候是“包含头,不包含尾”

所以0,1相当于是指向的一个字符,




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