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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邢晏玮 中级黑马   /  2012-11-6 18:16  /  2195 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邢晏玮 于 2012-11-9 15:54 编辑
  1. public class Fz
  2. {
  3.         public static void zh(char[] chr)
  4.         {
  5.                 for(int start = 0,end = chr.length-1;start<end;start++,end--)
  6.                 {
  7.                         swp(chr,start,end);
  8.                 }
  9.         }
  10.         public static void swp(char[] chr,int x,int y)
  11.         {
  12.                 char temp = chr[x];
  13.                 chr[x] = chr[y];
  14.                 chr[y] = temp;
  15.         }
  16.         public static String Fz(String s)
  17.         {
  18.                 char[] chr = s.toCharArray();
  19.                 zh(chr);
  20.                 return new String(chr);
  21.         }
  22.         public static void sop(String s)
  23.         {
  24.                 System.out.println(s);
  25.         }
  26.         public static void main(String args[])
  27.         {
  28.                 String s = "abcdefg";
  29.                 sop("("+s+")");
  30.                 sop("("+Fz(s)+")");
  31.         }
  32. }
复制代码
能否帮我讲解下是怎么翻转的  就是在这个地方不是很明白
  1. <p>public static void zh(char[] chr)
  2.         {
  3.         for(int start = 0,end = chr.length-1;start<end;start++,end--)
  4.         {</p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
本帖最后由 朱宏青 于 2012-11-6 20:00 编辑

很简单啊.
  1. public static void zh(char[] chr)
  2.         {
  3.                 for(int start = 0,end = chr.length-1;start<end;start++,end--)
  4.                 {
  5.                         swp(chr,start,end);
  6.                 }
  7.         }
复制代码
首先要明白swp()这个方法产生的是什么效果:录入一个数组,将chr[start]于chr[end]这两个数组数据进行互换.这点没有争议吧?

然后就是看这个for循环产生的是什么效果:start记录数组前端的下标.end记录数组后端的下标.每循环一次运行一次,start++  end--   ---->前端的下标越来越大,后端的下标越来越小 两者的差距越来越小 直到start >end 有问题么?

举个例子:123456789.每次拿前面的跟后面的互换,每互换一次前面的往后拿一位,后面的往前拿一位.最后的结果呢?987654321.

就是这样.

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public static void zh(char[] chr)
        {
        for(int start = 0,end = chr.length-1;start<end;start++,end--)
                        swp(chr,start,end);
         }

上面的这句代码其实就是for循环的巧应用。start指的是这个数组的第一个元素,所以其初始值为0,
end指的是该数组的最后一个元素,所以其初始值为:数组的长度-1。想要实现数组的反转,其实就是把数组的第一个
元素和最后一个元素交换位置,第二个元素和倒数第二个个元素交换位置,...注意:这个逻辑关系就出来了。
每执行一次start++,end--就会把数组的前面的元素和后面的元素给对应起来,就是从头部和从尾部同时向中间靠拢,然后进行交换,直到start<end;
只是把具体的两个数的交换给单独封装成一个swp方法了,这样的代码更有可读性,结构也很清晰。

推荐您打个断点,然后用dbug的方式,观察一下end和start的值的变化,会明白的更彻底滴 呵呵

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 很给力!

查看全部评分

回复 使用道具 举报
  1. public static void zh(char[] chr)

  2.         {

  3.                 for(int start = 0,end = chr.length-1;start<end;start++,end--)

  4.                 {

  5.                         swp(chr,start,end);

  6.                 }

  7.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马