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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

可以全部返回转,怎么不可以局部翻转?哪里的问题?
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;
        }

}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

3 个回复

倒序浏览

你的reverse方法中,start = x,end = y-1;所以当你调用reverseString(str,0,1));时,传入到reverse方法中时,start和end都是0.指向的是同一个位置,翻转之后没有任何变化。如果你调用reverseString(str,0,2));你就会发现翻转了。
回复 使用道具 举报
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是没有意义的。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
在对操作域进行设定的时候是“包含头,不包含尾”

所以0,1相当于是指向的一个字符,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马