黑马程序员技术交流社区

标题: 代码优化 [打印本页]

作者: walkonby    时间: 2013-1-29 20:47
标题: 代码优化
本帖最后由 张政 于 2013-2-2 21:48 编辑

两个问题
  1. /*
  2.         字符串反转
  3. */
  4. class FanZhuan{
  5.         public static char[] fanZhuan(char[] str){
  6.                 for(int i = 0,end = str.length - 1; i<end; i++,end--)
  7.                         swap(str,i,end);
  8.                 return str;
  9.         }
  10.         //重载
  11.         public static char[] fanZhuan(char[] str,int start,int end){
  12.                 for(int i = start; i<end; i++,end--)
  13.                         swap(str,i,end);
  14.                 return         str;
  15.         }
  16.         private static void swap(char[] str,int i,int end){
  17.                 //异或
  18.                 str[i] = (char)(str[i]^str[end]);
  19.                 str[end] = (char)(str[i]^str[end]);
  20.                 str[i] = (char)(str[end]^str[i]);
  21.         }
  22.         //输出
  23.         public static void show(String str){
  24.                 System.out.println("shwo:" + str);
  25.         }
  26. }

  27. class String_toCharArray{
  28.         public static void main(String[] args){
  29.                 String str = "123456";
  30.                 char[] cr = str.toCharArray();
  31.                 FanZhuan.show(new String(FanZhuan.fanZhuan(cr)));
  32.         }
  33. }
复制代码
上面的方式跟把除了要调用的私有不静态 然后让主函数new对象调 哪个好?
  1. /*
  2.         字符串反转2
  3. */
  4. class FanZhuan{
  5.         private static char[] fanZhuan(char[] str){
  6.                 for(int i = 0,end = str.length - 1; i<end; i++,end--)
  7.                         swap(str,i,end);
  8.                 return str;
  9.         }
  10.         //重载
  11.         private static char[] fanZhuan(char[] str,int start,int end){
  12.                 for(int i = start; i<end; i++,end--)
  13.                         swap(str,i,end);
  14.                 return         str;
  15.         }
  16.         private static void swap(char[] str,int i,int end){
  17.                 //异或
  18.                 str[i] = (char)(str[i]^str[end]);
  19.                 str[end] = (char)(str[i]^str[end]);
  20.                 str[i] = (char)(str[end]^str[i]);
  21.         }
  22.         public static void call(String str){
  23.                 char[] cr = str.toCharArray();
  24.                 show(new String(fanZhuan(cr)));
  25.         }
  26.         public static void call(String str,int start,int end){
  27.                 char[] cr = str.toCharArray();
  28.                 show(new String(fanZhuan(cr,start,end)));
  29.         }
  30.         //输出
  31.         private static void show(String str){
  32.                 System.out.println("shwo:" + str);
  33.         }
  34. }

  35. class String_toCharArray{
  36.         public static void main(String[] args){
  37.                 String str = "123456";
  38.                 FanZhuan.call(str,2,5);
  39.         }
  40. }
复制代码
call方法存在有没有意义

各位帮我从代码优化、性能效率上分析下 thank.
作者: 谢毅    时间: 2013-1-29 20:54
感觉下面的代码有点画蛇添足了,工具类最好每个功能是单一的,这样调用起来才能高内聚低耦合,没必要把转换字符串和打印的方法绑定在一起
作者: walkonby    时间: 2013-1-29 21:11
谢毅 发表于 2013-1-29 20:54
感觉下面的代码有点画蛇添足了,工具类最好每个功能是单一的,这样调用起来才能高内聚低耦合,没必要把转换 ...

这样我感觉很像java提供的方法那样啊  你只要给我个参数  其他你就不用管了 也不能管  反正我结果给你就是了
作者: 谢毅    时间: 2013-1-29 21:29
张政 发表于 2013-1-29 21:11
这样我感觉很像java提供的方法那样啊  你只要给我个参数  其他你就不用管了 也不能管  反正我结果给你就 ...

你回想一下java的API,一个工具类里,可能有的方法调用了其他方法,但是就像那个swap()一样,只是把单一的功能代码进行了优化,把公用代码提取出来,但是不会用两个完全不相干的功能来绑定一个方法,就好比不会把toString()放到其他方法里,然后组合成一个新功能,虽然你的思想是对的,但是你这样定义的话,万一程序员只想调用打印方法呢,他能调用么?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2