二维数组的赋值

int[][]a=newint[10][];for(inti=0;i<10;i++){int[i]=newint[i];for(intj=0;j<=i;j++){a[i]... int[][] a = new int[10][];
for(int i = 0 ; i < 10; i ++){
int[i] = new int[i];

for(int j = 0 ; j <= i ; j ++){
a[i][j] = 1;
}

}

为什么运行会出现空的异常?
展开
 我来答
死后是好人
2012-07-28 · TA获得超过2638个赞
知道小有建树答主
回答量:628
采纳率:0%
帮助的人:946万
展开全部
1、你int[i] = new int[i];的用法是绝对错误的,int是关键字,不能定为变量名,而且根据你的定义,你打二维数组已经定义过了,是a,所以要使用a[]
同时数组定义的时候,你new int[i],那么这一维数组中元素的数量就是i个,而元素的下标是从0开始的,分别对应0 ~ i-1 ,当你的i为1时,数组中只有一个元素,该元素对应的下标为0,由于你的i是从0开始的,所以2维数组的第一行是空的。前面说的定义维度为0会报错,切实试了一下,事实证明不会报错。

2、你的循环语句条件int j = 0 ; j <= i ; j ++中j是循环到等于i的,i是你数组的长度,这样必然会报下标溢出错误。
所以现在有两种改正方案:
一、
将int[i] = new int[i];改成a[i] = new int[i];
同时将int j = 0 ; j <= i ; j ++改成int j = 0 ; j < i ; j ++,去掉其中的等号,如果你上面那句是误打的话,那么你的程序出错的主要原因就是这句了
这种方法的输出结果第一行输出是空的,因为你a[0]中的元素是0个,输出如下:

1
11
111
1111
11111
111111
1111111
11111111
111111111
实际结果只有9行
二、
直接将int[i] = new int[i];改为a[i] = new int[i+1];
将长度改为i+1,这样j即是等于i,数组也不会溢出
下面的j相关的不需要改动
输出如下:
1
11
111
1111
11111
111111
1111111
11111111
111111111
1111111111
实际结果是10行,第一行不为空
smkfifkfv0305
2012-07-28 · 超过17用户采纳过TA的回答
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:51.4万
展开全部
int[i]=new int[i];没有数组变量呀!int[][] a =new int[10][];后边的长度也要写上int[][] a=new int[10][10];
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
flower_wzm
2012-07-28 · TA获得超过921个赞
知道小有建树答主
回答量:636
采纳率:0%
帮助的人:282万
展开全部
你要a[i]=new int[i+1]这样
否则你循环开始就变成了new int[0]这样,当然会出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wwwlanger100
2012-07-28 · 超过13用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:30.9万
展开全部
把new int[i]; 里面的i改成你的长度10
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小湛实验室
2012-07-28 · TA获得超过101个赞
知道答主
回答量:111
采纳率:0%
帮助的人:37.2万
展开全部
是否没有初始化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式