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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© suiabing 中级黑马   /  2012-4-30 00:07  /  2375 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 隋丙跃 于 2012-4-30 00:11 编辑

public static String myToString(int[] a){
                int iMax = a.length - 1;
                if (iMax == -1)
                    return "[]";

        StringBuilder b = new StringBuilder();
        b.append('[');
        for (int i = 0;  ; i++) {
            b.append(a
);
            if (i == iMax)
                    return b.append(']').toString();
           b.append(", ");
        }
        }


这里的for循环的好处是什么呢,为什么这么写呢?和for(int i = 0; i < iMax; i++)有什么区别嗯?不是每次也都需要判断是否等于iMax吗

9 个回复

倒序浏览
其实算一算i 值就知道了,i 的值多加了一次 ,用
for (int i = 0;  ; i++) {
            b.append(a);
            if (i == iMax)
                    return b.append(']').toString();
           b.append(", ");
可以减少一次 i 的运算
回复 使用道具 举报
贾联国 发表于 2012-4-30 01:10
其实算一算i 值就知道了,i 的值多加了一次 ,用
for (int i = 0;  ; i++) {
            b.append(a);

i 的值并没有减少运算,如果减少 toString() 方法不就失败了吗?注意看题!i++是在后面的,不是条件语句
回复 使用道具 举报
本帖最后由 贾联国 于 2012-4-30 01:50 编辑

第二种方法不是for(int i = 0; i < iMax; i++),而是for(int i = 0; i <= iMax; i++)
先运行
  1. class ToDemo
  2. {
  3. public static void main(String[] args)
  4. {
  5. int arr []=new int[]{1,2,3,4,5,6};

  6. System.out.println(myToString(arr));
  7. }
  8. public static String myToString(int[] a)
  9. {
  10. int iMax = a.length - 1;
  11. if (iMax == -1)
  12. return "[]";

  13. else{StringBuilder b = new StringBuilder();
  14. b.append('[');


  15. for (int i = 0; ; i++,System.out.println(i)) {
  16. b.append(a);
  17. if (i == iMax)
  18. return b.append(']').toString();
  19. b.append(", ");

  20. }

  21. }
  22. }
  23. }

复制代码
再运行以下程序

  1. <P>class  ToDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int arr []=new int[]{1,2,3,4,5,6};
  6.                
  7.                 System.out.println(myToString(arr));
  8.         }
  9.         public static String myToString(int[] a)
  10.                 {
  11.                 int iMax = a.length - 1;
  12.                 if (iMax == -1)
  13.                     return "[]";

  14.        else{StringBuilder b = new StringBuilder();
  15.         b.append('[');
  16.        for (int i = 0; i <= iMax; i++, System.out.println(i))
  17.            {
  18.               b.append(a);               
  19.            b.append(", ");               
  20.            }
  21.            return b.append(']').toString();         
  22.     }
  23.                 }
  24. }
  25. </P>
复制代码
回复 使用道具 举报
判断条件写成i<iMax也可以让循环减少一次,把最后一个数在放在for之后加:
  1. public static String myToString(int[] a)
  2. {
  3.         int iMax = a.length - 1;
  4.         if (iMax == -1)
  5.         {
  6.                 return "[]";
  7.         }

  8.         StringBuilder b = new StringBuilder();
  9.         b.append('[');

  10.         for (int i = 0;i < iMax;i++)
  11.         {
  12.                 b.append(a[i]);
  13.                 b.append(", ");
  14.         }
  15.         b.append(a[iMax]);
  16.         return b.append(']').toString();
  17. }
复制代码
回复 使用道具 举报

回帖奖励 +2

隋哥你好!!!
隋哥你喜欢画图 我给你画一个
如果不要求打印的漂亮 你的for和它的for一样  但是如果要打印“]” 它就比你省资源 左边是它的for,右边是你的
回复 使用道具 举报
何阳 中级黑马 2012-4-30 19:48:39
7#
public static String myToString(int[] a){
                int iMax = a.length - 1;
                if (iMax == -1)
                    return "[]";

        StringBuilder b = new StringBuilder();
        b.append('[');
        for (int i = 0;  ; i++) {//如果不写条件的话,for为无线循环,不用每次判断条件
            b.append(a);
            if (i == iMax)//if判断写在里面,只有当循环的i等于最大值时,执行if里面的语句
                 //return 返回,结束函数。
                  
           return b.append(']').toString();
           b.append(", ");
        }
        }
回复 使用道具 举报
倪杭乘 发表于 2012-4-30 16:24
隋哥你好!!!
隋哥你喜欢画图 我给你画一个
如果不要求打印的漂亮 你的for和它的for一样  但是如果要打印 ...


abc转化一次发现
它的for少执行了一次,老外真抠门,这点资源都省!

回复 使用道具 举报
if (i == iMax)
                     return b.append(']').toString();

写成这样式因为可以代码简写;如果你把条件语句放在for圆括号里就得在for循环代码中加个判断是不是等于最后的值;这增加了代码量;
回复 使用道具 举报
此题已解决 thanks
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马