数组引用越界,异常处理问题

大板牙花生 2013-03-31 10:01:32
引用一个数组,不知道数组边界,怎么进行判断,非得要遍历吗?
怎么引用的数组越界了?
...全文
1244 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
tristan-k 2013-04-02
  • 打赏
  • 举报
回复
引用 11 楼 wter26 的回复:
引用 9 楼 MELEARNER 的回复:for (int varnum = 1; varnum <= ColumnNum; varnum++) { Content[i][varnum] = this.getString(rs.getString(varnum)); 你的varnum是从1 开始的,改成从0开始的试试。 ……
首先需要问题定位: 通过你的帖子,我得到的信息:假如你从数据库中查询结果为2行2列。你想要把查询结果放到二维字符串数组里面。 问题:你初始化的二维字符串数组在存放数据的时候报了数组越界问题。 原因推断:你没有保证查询出来的2行2列正确的放入到二维字符串数组中。调试下你原来的程序吧。从content[0][0],content[0][1],content[1][0],content[1][1]这个四个元素逐一检查。 报错产生的错误信息是最好的提示:数组越界,这个就已经告诉你真正原因了。你所要做的,是找到你什么地方用错了
大板牙花生 2013-04-02
  • 打赏
  • 举报
回复
引用 14 楼 MELEARNER 的回复:
引用 11 楼 wter26 的回复: 引用 9 楼 MELEARNER 的回复:for (int varnum = 1; varnum <= ColumnNum; varnum++) { Content[i][varnum] = this.getString(rs.getString(varnum)); 你的varnum是从1 开始的,改成从0……
好的。你这个方法很有建设性
huangxiaofei 2013-04-01
  • 打赏
  • 举报
回复
其实还有个办法,就是不要用Java原生的数组[],而改用泛型的ArrayList这种容器,然后用iterator就可以很轻松的遍历
onlyyou67 2013-04-01
  • 打赏
  • 举报
回复
可能是读取数据库的时候,他还会hashnaxt一行数据,所以你要长度加一
大板牙花生 2013-04-01
  • 打赏
  • 举报
回复
引用 8 楼 lxpandsq 的回复:
数据库查询,不建议使用数组的,用arraylist最好。 java数组要不直接初始化时候直接定义固定维数、长度,要不先要声明维数、长度,没有动态数组的说法,不像C++还可以在申请空间,java只有重新拷贝了。 只要数组赋值成功,那它的行数为,str.length,列数为str[0].length 而且在sql中,本来就有一个计行数的方法,只不过,用了以后,要把游标还回去而已
恩,没有动态数组的说法,这个是以前的毛病,一下改不过来。 我是先读取行数和列数,然后再生成数组,实际上是做了3次查询,感觉效率低,而且容易出错。 ARRAYLIST之外还有其他能解决的思路吗?能否给几个关键字,我好学习学习
大板牙花生 2013-04-01
  • 打赏
  • 举报
回复
引用 9 楼 MELEARNER 的回复:
for (int varnum = 1; varnum <= ColumnNum; varnum++) { Content[i][varnum] = this.getString(rs.getString(varnum)); 你的varnum是从1 开始的,改成从0开始的试试。 你的嵌套循环中,数组的下标没用设置好。 此外,不建议用多维……
java的下标是从0开始还是1呢?我看到我引用的需要从1开始,手册上有这个介绍吗?
大板牙花生 2013-04-01
  • 打赏
  • 举报
回复
引用 7 楼 huangxiaofei 的回复:
其实还有个办法,就是不要用Java原生的数组[],而改用泛型的ArrayList这种容器,然后用iterator就可以很轻松的遍历
这个是否是最好的解决方法,也算是最高效的解决方法? 除了这个容器,其他的LIST是否也行,区别又在哪里,给几个关键字我到网上搜索一下,谢谢了
tristan-k 2013-04-01
  • 打赏
  • 举报
回复
for (int varnum = 1; varnum <= ColumnNum; varnum++) { Content[i][varnum] = this.getString(rs.getString(varnum)); 你的varnum是从1 开始的,改成从0开始的试试。 你的嵌套循环中,数组的下标没用设置好。 此外,不建议用多维数组
lxpandsq 2013-04-01
  • 打赏
  • 举报
回复
数据库查询,不建议使用数组的,用arraylist最好。 java数组要不直接初始化时候直接定义固定维数、长度,要不先要声明维数、长度,没有动态数组的说法,不像C++还可以在申请空间,java只有重新拷贝了。 只要数组赋值成功,那它的行数为,str.length,列数为str[0].length 而且在sql中,本来就有一个计行数的方法,只不过,用了以后,要把游标还回去而已
大板牙花生 2013-03-31
  • 打赏
  • 举报
回复
还有个问题。。。。 我自己写了一个函数查询数据库,导入到2维数组当中,我建立了一个动态数组 array[行数][列数]但是在循环读取数据库赋值的时候必须要把数组下标都加一才不会出错,否则就会越界。 比如我的数据库中有2行2列,我必须要写出array[3][3]才不会犯错,请问这个是怎么回事呢?
String[][] Content = new String[RowNum + 1][ColumnNum + 1];

rs = this.Smt.executeQuery(" select * from table where condition");
			while (rs.next()) {
				for (int varnum = 1; varnum <= ColumnNum; varnum++) {

					Content[i][varnum] = this.getString(rs.getString(varnum));
					
				}
i += 1; }
大板牙花生 2013-03-31
  • 打赏
  • 举报
回复
引用 3 楼 racemark111 的回复:
可以通过 .length 来获取数组长度
那么多多维数组如何进行处理呢?
大板牙花生 2013-03-31
  • 打赏
  • 举报
回复
引用 3 楼 racemark111 的回复:
可以通过 .length 来获取数组长度
就是说这种获取数组的长度是在引用数组的时候才用到到,并没有达到提前做好异常处理,我的意思是在引用的时候自动显示友好信息?
菜鸟级高手 2013-03-31
  • 打赏
  • 举报
回复
可以通过 .length 来获取数组长度
ceclinux 2013-03-31
  • 打赏
  • 举报
回复
不懂,数据的长度不是可以通过.length获得吗
  • 打赏
  • 举报
回复
使用前加数组大小判断

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧