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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨道红 中级黑马   /  2013-12-26 15:29  /  1940 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨道红 于 2013-12-26 19:14 编辑
  1. public class MyReverce {
  2.         public static void main(String[] args) {
  3.                 String s = "kjf da sdabc";
  4.                 String s1 = method_reverce(s);
  5.                 String s2 = method_reverce(s,3,5);
  6.                 sop(s);
  7.                 sop(s1);
  8.                 sop(s2);
  9.         }
  10.         public static String method_reverce(String str){
  11.                 return method_reverce(str,0,str.length()-1);
  12.         }
  13.         public static String method_reverce(String str, int start , int end){
  14.                 char[] ch = str.toCharArray();
  15.                 for(;start<end;start++,end--){
  16.                         change(ch,start,end);
  17.                 }
  18.                 return new String(ch);
  19.         }
  20.         public static void change(char[] arr,int b,int c){
  21.                 char temp = arr[b];
  22.                 arr[b] = arr[c] ;
  23.                 arr[c] = temp;
  24.         }
  25.         public static void sop(Object obj){
  26.                 System.out.println(obj);
  27.         }
  28. }
复制代码

在哪里修改可以让尾角标不参加反转?就如例子中的 String s2 = method_reverce(s,3,5);
我不希望5那个角标也参与反转。

评分

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

查看全部评分

12 个回复

倒序浏览
  1. public static String method_reverce(String str, int start, int end) {
  2.                 char[] ch = str.toCharArray();
  3.                 for (; start < end; start++, end--) {
  4.                        
  5.                         if (end == str.length()-1) {
  6.                                 continue;
  7.                         }

  8.                         change(ch, start, end);
  9.                 }
  10.                 return new String(ch);
  11.         }
复制代码



加一个判断  是最后一个角标的时候 不交换  代码已给出
回复 使用道具 举报
75100313 发表于 2013-12-26 15:44
加一个判断  是最后一个角标的时候 不交换  代码已给出

我只想再某个值后面进行+1或者-1
回复 使用道具 举报
  1. public static String method_reverce(String str){
  2.                 return method_reverce(str,0,str.length()-2);
  3.         }
复制代码
回复 使用道具 举报
不明白你的意思 还请高人帮你把
回复 使用道具 举报

不行~-2差得更多了
回复 使用道具 举报
杨道红 发表于 2013-12-26 16:33
不行~-2差得更多了

你的尾脚标指的什么地方?
回复 使用道具 举报
什么意思呢,能不能说的具体一点?
回复 使用道具 举报
伊文龙 发表于 2013-12-26 16:36
你的尾脚标指的什么地方?

就如例子中的 String s2 = method_reverce(s,3,5);
我不希望5那个角标也参与反转。
回复 使用道具 举报
任亚俊 发表于 2013-12-26 16:46
什么意思呢,能不能说的具体一点?

就如例子中的 String s2 = method_reverce(s,3,5);
我不希望5那个角标也参与反转。
回复 使用道具 举报
本帖最后由 杨道红 于 2013-12-26 19:13 编辑
75100313 发表于 2013-12-26 15:44
加一个判断  是最后一个角标的时候 不交换  代码已给出
  1. public class MyReverce {
  2.         public static void main(String[] args) {
  3.                 String s = "kjf da sdabc";
  4.                 String s1 = method_reverce(s);
  5.                 String s2 = method_reverce(s,3,5);
  6.                 sop(s);
  7.                 sop(s1);
  8.                 sop(s2);
  9.         }
  10.         public static String method_reverce(String str){
  11.               //return method_reverce(str,0,str.length()-1);
  12.                 return method_reverce(str,0,str.length)
  13.         }
  14.         public static String method_reverce(String str, int start , int end){
  15.                 char[] ch = str.toCharArray();
  16.                 for(;start<end;start++,end--){
  17.                         //change(ch,start,end)
  18.                         change(ch,start,end-1);
  19.                 }
  20.                 return new String(ch);
  21.         }
  22.         public static void change(char[] arr,int b,int c){
  23.                 char temp = arr[b];
  24.                 arr[b] = arr[c] ;
  25.                 arr[c] = temp;
  26.         }
  27.         public static void sop(Object obj){
  28.                 System.out.println(obj);
  29.         }
  30. }
复制代码
回复 使用道具 举报
method_reverce(String str, int start , int end)
按照习惯,这个方法的设计一般会是 method_reverce(String str, int start , int length),java标准api里面有很多类似的方法,比如String.subString, InputStream的write, OutputStream的read。他们一般第二个参数都是起始下标,length是从这个下标开始的length个该类型数据。
  1.         /**
  2.          * @param source
  3.          * @param index 开始的下标
  4.          * @param length 要反转的长度
  5.          * @return
  6.          */
  7.         public static String reverce(String source, int index, int length) {
  8.                 //TODO 判断length的长度是否越界
  9.                 char[] sourceArray = source.toCharArray();
  10.                 //栈,先进后出,你懂的
  11.                 Stack<Character> stack = new Stack<Character>();
  12.                 for (int i = 0; i < length; i++) {
  13.                         stack.push(sourceArray[index+i]);
  14.                 }
  15.                
  16.                 char[] temp = new char[length];
  17.                 for (int i = 0; i < length; i++){
  18.                         temp[i] = stack.pop();
  19.                 }
  20.                
复制代码

评分

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

查看全部评分

回复 使用道具 举报
少两句。。。
  1.                 return new String(temp);
  2.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马