喜悦国际村 » JAVA/C/C++ » 这种用法为何有错!

页: [1]
lee_c2004-11-28 09:02 AM
这种用法为何有错!

我在JSP程序中如下使用三维数组:
String names[][][]=new String[level1len][][];
在后面的程序中确定了数组后面的维数,使用循环来分配数组
//level1len,level2len[],level3len分别记录了数组的三维的大小!
for(filei=0;filei<level1len;filei++)
{
    names[filei]=new String[level2len[filei]][];
    for(filej=0;filej<level2len[filei];filej++)
    {
        names[filei][filej]=new String[level3len[filej]];
        out.print(names[filei][filej].lenght);
    }
}
out.print(names[0][0].length);
这段程序循环里面的打印语句就没有问题,但是循环外面那个打印语句就报NULL的错误!此时循环里面输出的names[0][0].length为0,是我预想中的结果。
请问这是为什么?

lee_c2004-11-29 08:51 AM
不知道这种零长度数组的使用上有什么特别的要求?

lee_c2004-12-1 02:01 AM
[QUOTE][求助]关于零长度数组!
程序想要把4层树形结构表示成不规则静态数组,程序如下:
这里LEVEL1LEN为5,level2len[5]为12,13,6,2,2,level3len[35]为0,...,0(12个0),0,...,0(13个0),4,4,1,0,3,5,0,0,6,6,代表各层元素的子元素个数
String level1channeltreename[]=new String[level1len];
String level1channeltreeid[]=new String[level1len];
String level2channeltreename[][]=new String[level1len][];
String level2channeltreeid[][]=new String[level1len][];
String level3channeltreename[][][]=new String[level1len][][];
String level3channeltreeid[][][]=new String[level1len][][];

filetemp=0;
for(filei=0;filei<level1len;filei++)
{
for(filej=0;filej<level2len[filei];filej++,filetemp++)
{
  level2channeltreename[filei]=new String[level2len[filei]];
  level3channeltreename[filei]=new String[level2len[filei]][];
  if(level3len[filetemp]==0)
  {
   level3channeltreename[filei][filej]=new String[0];
  }
  else
  {
   level3channeltreename[filei][filej]=new String[level3len[filetemp]];
  }
  out.print("level3channeltreename["+filei+"]["+filej+"] length="+level3channeltreename[filei][filej].length+"<br>");
}
}
out.print(level3channeltreename[0][0].length);
输出如下:
level3channeltreename[0][0] length=0
level3channeltreename[0][1] length=0
level3channeltreename[0][2] length=0
level3channeltreename[0][3] length=0
level3channeltreename[0][4] length=0
level3channeltreename[0][5] length=0
level3channeltreename[0][6] length=0
level3channeltreename[0][7] length=0
level3channeltreename[0][8] length=0
level3channeltreename[0][9] length=0
level3channeltreename[0][10] length=0
level3channeltreename[0][11] length=0
level3channeltreename[1][0] length=0
level3channeltreename[1][1] length=0
level3channeltreename[1][2] length=0
level3channeltreename[1][3] length=0
level3channeltreename[1][4] length=0
level3channeltreename[1][5] length=0
level3channeltreename[1][6] length=0
level3channeltreename[1][7] length=0
level3channeltreename[1][8] length=0
level3channeltreename[1][9] length=0
level3channeltreename[1][10] length=0
level3channeltreename[1][11] length=0
level3channeltreename[1][12] length=0
level3channeltreename[2][0] length=4
level3channeltreename[2][1] length=4
level3channeltreename[2][2] length=1
level3channeltreename[2][3] length=0
level3channeltreename[2][4] length=3
level3channeltreename[2][5] length=5
level3channeltreename[3][0] length=0
level3channeltreename[3][1] length=0
level3channeltreename[4][0] length=6
level3channeltreename[4][1] length=6
java.lang.NullPointerException
循环里面的语句执行正常,循环外面的语句打印NULL异常,百思不得其解,请哪位指点一二,不胜感激!
[/QUOTE]
sorry,表述问题时省略了不少,导致出错,前面问的程序实际没有错误!
上面才是正确的问题表述,出错的原因是
level2channeltreename[filei]=new String[level2len[filei]];
  level3channeltreename[filei]=new String[level2len[filei]][];
这两行引起的,在循环里面对于它们重复定义了!


查看完整版本: 这种用法为何有错!


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.005741 second(s), 2 queries