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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王利强 中级黑马   /  2012-3-15 22:32  /  2074 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不多说,先看代码,主要是reverse方法中关于end=y-1的取值有点疑问,我验证过了,end=y-1是正确的取法,但我就是理解不了,按道理来说reversr(s,x,y)是将角标为x和角标为y的字符交换位置,如果y-1的话岂不是角标为x和角标为y-1的字符交换位置了么?
//练习二:将字符串进行翻转
        public static String reverseString(String str,int x,int y)
        {
                char[] chr=str.toCharArray();
                reverse(chr,x,y);               
                return new String(chr);
        }
        public static void reverse(char s[],int x,int y)
        {
                for (int start=x,end=y-1; start<end;start++,end-- )
                {char temp=s[x];
                          s[x]=s[y];
                          s[y]=temp;
                }
        }
        public static void main (String[] args)
        {
                String s="abcdetyaet";
                String s1=reverseString(s,2,9);
                System.out.println(s1);
       
        }
}

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

3 个回复

倒序浏览
这是因为数字下标是从0开始的。还有你的程序有些问题我已经修改过了
public static void main(String[] args)
        {
                String s="0123456789";
                System.out.println(s);
        String s1=reverseString(s,0,s.length()-1);
        System.out.println(s1);
        }
       
        public static String reverseString(String str,int x,int y)
    {
            char[] chr=str.toCharArray();
            reverse(chr,x,y);               
            return new String(chr);
    }
    public static void reverse(char s[],int x,int y)
    {
              char temp;
            for (int start=x,end=y; start<end;start++,end-- )
            {
                    System.out.println(start+"---"+end);
                          temp=s[start];
                      s[start]=s[end];
                      s[end]=temp;
            }
    }

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李爱军 于 2012-3-15 23:23 编辑

数组的下角标是从零开始索引的,所以最后面的参数自然是y-1了。
回复 使用道具 举报
你听课没仔细听 因为java的设计者们设计  翻转的时候都是  包含头 包含尾的    这也算是一种规范了
  所以y-1   比如 调用 reserve(0,5)实际翻转的是0-4  这几个字符串的  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马