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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yedaiwang 中级黑马   /  2014-12-31 17:47  /  2009 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

因为还没学到 后面的 看了大家的解决办法 看不懂 我就想用已经学过的办法 试试
过程是这样的 不知道能不能实现
char [ ] arr={'a','b' , 'c' , 'd' , 'e'};
然后建立一个函数
public static void getSort(char[ ] arr)
然后嵌套循环
for(int x =arr.length ; x>0;x--)
  for(int y=0;y<x-1;y++)
    int temp=0;
   temp=arr[y];
   arr[y]=arr[y+1];
  arr[y+1]=(char) temp;
//意思就是0角标和1角标换位,1角标对应元素和2角标对应元素换位。。。。。这样arr[ 0 ]就换到了arr [4]  也就是a换到了e,以此类推,,,,

21 个回复

倒序浏览
有个问题就是 y 变量 循环完就释放了,所以想打印打印不出来
回复 使用道具 举报
重新定义个字符数组,将原来的字符数组,从最后位的开始赋值给新的字符数组!
回复 使用道具 举报 1 0
String类有个reverse(),方法。
回复 使用道具 举报
本帖最后由 zqbemail 于 2014-12-31 20:13 编辑

不用循环这么多次,你这已经把完整的循环了数组长度*数组长度这么多次,如果数组有8个,你相当于8*8=64次。
只要循环半个数组的长度就可以了。即arr.length/2+1的长度,即是5次,为什么要+1是为了预防单数相除会有漏一次的情况。。
另外定义一个数组接收。
char[] arr2= new char[arr.length];
for(i=0; i<arr.length/2+1;i++)
{
    arr2 = arr[arr.length-i];
}
应该可以,你试一下。只要循环半个length的长度,效率要高很多。
回复 使用道具 举报
本帖最后由 reyzarc 于 2014-12-31 21:32 编辑

最简单的就是用StringBuffer类的reverse方法;
最容易想到的就是遍历这个数组,然后使用新数组接收反转过后的字符数组;
还有一个思路跟第二个一样,只是遍历数组到中间角标,首尾交换。
  1. char[] c = { 'a', 'b', 'c', 'd', 'e' };
  2.                 // 方法一:使用新数组接收
  3.                 char[] c1 = new char[c.length];
  4.                 for (int i = 0; i < c.length; i++) {
  5.                         c1[c.length - 1 - i] = c[i];
  6.                 }
  7.                 System.out.println(String.copyValueOf(c1));

  8.                 // 方法二:数组反转
  9.                 for (int i = 0; i < c.length / 2; i++) {
  10.                         char temp = c[i];
  11.                         c[i] = c[c.length - 1 - i];
  12.                         c[c.length - 1 - i] = temp;
  13.                 }
  14.                 System.out.println(String.copyValueOf(c));

  15.                 // 方法三:使用reverse()方法
  16.                 String s = new String(c);
  17.                 System.out.println(new StringBuffer(s).reverse());
复制代码



点评

很全面,学习啦  发表于 2015-1-1 00:34
回复 使用道具 举报 1 0
reyzarc 发表于 2014-12-31 21:30
最简单的就是用StringBuffer类的reverse方法;
最容易想到的就是遍历这个数组,然后使用新数组接收反转过后 ...

感谢分享
回复 使用道具 举报
zqbemail 发表于 2014-12-31 20:10
不用循环这么多次,你这已经把完整的循环了数组长度*数组长度这么多次,如果数组有8个,你相当于8*8=64次 ...

这个方法可行,谢谢
回复 使用道具 举报
zqbemail 发表于 2014-12-31 20:10
不用循环这么多次,你这已经把完整的循环了数组长度*数组长度这么多次,如果数组有8个,你相当于8*8=64次 ...
  1. class arr
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char[]arr={'a','b','c','d','e'};
  6.                 char[]arr_2=new char[arr.length];
  7.                 for (int x=0;x<arr.length ;x++ )
  8.                 {
  9.                         arr_2[x]=arr[arr.length-x-1];
  10.                         System.out.print(arr_2[x]);
  11.                 }
  12.                
  13.         }
  14.        
  15. }
复制代码
回复 使用道具 举报
reyzarc 发表于 2014-12-31 21:30
最简单的就是用StringBuffer类的reverse方法;
最容易想到的就是遍历这个数组,然后使用新数组接收反转过后 ...

en 谢谢分享
回复 使用道具 举报

我还是写少了,不用遍历完。
for循环照样是一半。
arr_2[x] = arr[arr.length-x-1];
再加上:arr_2[arr.length-x-1]=arr[x];
即可。循环越少,运算越快。
回复 使用道具 举报
人才啊,挺好的,你很有前途
回复 使用道具 举报
你老师的视频里是这样实现的,for(int x=0,y=arr.length-1;x<y; x++,y--)这是语句中的条件。我感觉很容易理解,也比其他人说的要高效。
回复 使用道具 举报
可以根据角标获取字符串中的字符,abcde 01234 从最后一个角标开始,每获取一个就存入到一个容器中。
StringBuilder sb = new StringBuilder(); //创建一个容器
String str = "abcde";
char ch; //用于记录字符串中的每一个字符
for(int i = str.length()-1; i>0, i--){
     ch = str.charAt(i); //遍历字符串,从最后一个角标开始,获取字符
     sb.apend(ch); //把字符存入到容器中
}
System.out.println(sb); //打印容器内容就可以了

无格式编辑,如果有错误见谅, 只是提供一个思路
回复 使用道具 举报
学习赞一下
回复 使用道具 举报
reverse()方法可以实现,另外给楼主提供一个思路。
数组遍历你会吧?
一般来水,数组遍历我们都是正序遍历的,但是呢,我们倒序遍历如何?那样就正好输入原来数据的反向数据了!只需要修改参数即可。
回复 使用道具 举报
清浅。。 来自手机 中级黑马 2015-1-1 10:38:38
17#
会学到的,别急
回复 使用道具 举报
加油~~~~~~~~
回复 使用道具 举报
赵涛涛 发表于 2015-1-1 10:30
reverse()方法可以实现,另外给楼主提供一个思路。
数组遍历你会吧?
一般来水,数组遍历我们都是正序遍历 ...

这样不行哦 这样只是倒序打印 并没有 将他们反向调换
回复 使用道具 举报
yedaiwang 发表于 2015-1-1 12:12
这样不行哦 这样只是倒序打印 并没有 将他们反向调换

确实,我这种方法只能实现倒序打印,并不能实现对应互换
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马