黑马程序员技术交流社区
标题:
数组反转问题
[打印本页]
作者:
邢晏玮
时间:
2012-11-6 18:16
标题:
数组反转问题
本帖最后由 邢晏玮 于 2012-11-9 15:54 编辑
public class Fz
{
public static void zh(char[] chr)
{
for(int start = 0,end = chr.length-1;start<end;start++,end--)
{
swp(chr,start,end);
}
}
public static void swp(char[] chr,int x,int y)
{
char temp = chr[x];
chr[x] = chr[y];
chr[y] = temp;
}
public static String Fz(String s)
{
char[] chr = s.toCharArray();
zh(chr);
return new String(chr);
}
public static void sop(String s)
{
System.out.println(s);
}
public static void main(String args[])
{
String s = "abcdefg";
sop("("+s+")");
sop("("+Fz(s)+")");
}
}
复制代码
能否帮我讲解下是怎么翻转的 就是在这个地方不是很明白
<p>public static void zh(char[] chr)
{
for(int start = 0,end = chr.length-1;start<end;start++,end--)
{</p>
复制代码
作者:
朱宏青
时间:
2012-11-6 19:53
本帖最后由 朱宏青 于 2012-11-6 20:00 编辑
很简单啊.
public static void zh(char[] chr)
{
for(int start = 0,end = chr.length-1;start<end;start++,end--)
{
swp(chr,start,end);
}
}
复制代码
首先要明白swp()这个方法产生的是什么效果:录入一个数组,将chr[start]于chr[end]这两个数组数据进行互换.这点没有争议吧?
然后就是看这个for循环产生的是什么效果:start记录数组前端的下标.end记录数组后端的下标.每循环一次运行一次,start++ end-- ---->前端的下标越来越大,后端的下标越来越小 两者的差距越来越小 直到start >end 有问题么?
举个例子:123456789.每次拿前面的跟后面的互换,每互换一次前面的往后拿一位,后面的往前拿一位.最后的结果呢?987654321.
就是这样.
作者:
冯纪纲
时间:
2012-11-6 23:35
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的值的变化,会明白的更彻底滴 呵呵
作者:
杨志男
时间:
2012-11-7 15:24
public static void zh(char[] chr)
{
for(int start = 0,end = chr.length-1;start<end;start++,end--)
{
swp(chr,start,end);
}
}
复制代码
无标题1.png
(21.86 KB, 下载次数: 73)
下载附件
2012-11-7 15:24 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2