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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 棉/mg花/x糖 于 2013-5-23 18:32 编辑

阅读下面程序,写出程序的运行结果

这段程序中,本人有一条语句不理解。
对于数组,都有一个自动下标越界检查,为什么这里bTbl[i+1]在i=3时,
下标明显越界,程序却还能顺利通过呢
???

  1. package com.yb.Test;

  2. public class Test10 {
  3.     /**
  4.      * @param args
  5.      */
  6.     public static void main(String[] args) {
  7.         // TODO Auto-generated method stub
  8.         boolean bTbl[][] = new boolean[4][];
  9.         for(int i = 0; i < bTbl.length; i++) {
  10.             bTbl[i] = new boolean[i+1];                //这条语句看不明白
  11.         }
  12.         for(int i = 0; i < bTbl.length; i++) {
  13.             for (int j = 0; j < bTbl[i].length; j++) {
  14.                 System.out.print(bTbl[i][j]+" ");
  15.             }
  16.             System.out.println();
  17.         }
  18.     }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 又看到你了 加油

查看全部评分

7 个回复

倒序浏览
bTbl[i] = new boolean[i+1];   这是新建一个数组 并让其btbl这个二维数组中的第i个数组等于这个新建的数组 跟btbl.length没有关系.
写成下面这样就好理解了.
boolean[] bls=new boolean[i+1];
btbl[i]=bls;//btbl这个二维数组中的第i个元素就是刚刚新建的bls 也就是new boolean[i+1];

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 棉/mg花/x糖 于 2013-5-23 18:32 编辑
李尧 发表于 2013-5-23 17:49
bTbl = new boolean;   这是新建一个数组 并让其btbl这个二维数组中的第i个数组等于这个新建的数组 跟btbl ...


哦,明白了,就是通过new关键字为每一维数组分配空间!!

前面的"i"和后面"i+1"没有半点关系。
回复 使用道具 举报
其实没有越界,来稍微解释一下,楼主不懂继续问,共同学习
public static void main(String[] args) {

       boolean bTbl[][] = new boolean[4][];//二维数组,其实可以理解成多个一维数组,也就是你创建了四个一维数组,二维数组的长度为4
但是一维数组长度没有确定,哦了。

        for(int i = 0; i < bTbl.length; i++) {

            bTbl = new boolean[i+1];                //这条语句看不明白[/color]//该条语句是通过二维数组的长度循环来定义一维数组的。例如第一个一维数组长度为1,第二个为2,.....共四个即最后一个长度为4

        }

       for (int i = 0; i < bTbl.length; i++) {

           for (int j = 0; j < bTbl
.length; j++) {

                System.out.print(bTbl
[j]+" ");//从此处打印可以得到验证

          }

           System.out.println();

      }

    }

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
没赶上。。
回复 使用道具 举报
package com.yb.Test;

public class Test10 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        boolean bTbl[][] = new boolean[4][];
        for(int i = 0; i < bTbl.length; i++) {
            bTbl[i] = new boolean[i+1];                //这条语句看不明白-------》数组初始化:第一行数组长度为1,第二行长度为2,依次类推,右边的i+1不是下标,而是分配长度
        }
        for (int i = 0; i < bTbl.length; i++) {
            for (int j = 0; j < bTbl[i].length; j++) {
                System.out.print(bTbl[i][j]+" ");
            }
            System.out.println();
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
谢孔营 发表于 2013-5-23 18:13
其实没有越界,来稍微解释一下,楼主不懂继续问,共同学习
public static void main(String[] args) {

哦,明白了,感谢感谢啊。
我这是基本概念的混淆了,再次感激你帮我把问题分析得如此透彻。

回复 使用道具 举报
kaka小明 发表于 2013-5-23 18:16
package com.yb.Test;

public class Test10 {

哦,明白了,感谢感谢啊。
我这是基本概念的混淆了,再次感激你帮我把问题分析得如此透彻。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马