java 数组越界问题
本帖最后由 忆北 于 2023-11-2 20:39 编辑public class ArrayDemo7 {
public static void main(String[] args) {
// 创建一个11*11的二维数组
int[][] array = new int;
array = 1;
array = 2;
// 转换为稀疏数组保存
// 获取有效值个数
int number = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if(array!=0){
number++;
}
}
}
System.out.println(number);
// 创建一个稀疏数组
int[][] array1 = new int;
array1 = 11;
array1 = 11;
array1 = number;
// 遍历二维数组,将非零值,存放到稀疏数组里
int count = 0;
for (int i = 0; i < array.length;i++) {
for (int j = 0; j < array.length; j++) {
if (array!=0){
count++;
array1 = i;
array1 = j;
array1 = array;
}
}
}
// 输出稀疏数组
System.out.println("输出稀疏数组");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1+"\t"+array1+"\t"+array1);
}
// 还原
int[][] array2 = new int]];
for (int i = 0; i < array1.length; i++) { 把这个i=0变成i=1就好了
array2]] = array1; 这一行他说数组越界了,为什么等于0就越界了啊,我以为等于0后,就是第11行11列等于2了,但是直接会报错了,我知道这样不好看,但是不知道怎么发了,有知道的大佬请求帮助一下。
}
for (int[] ints:array2) {
for(int anint : ints){
System.out.print(anint+"\t");
}
System.out.println();
}
}
}
问题出在这一行代码上:
array2]] = array1;
在这里,你试图将稀疏数组array1中的值还原到二维数组array2中。但是,你在这里使用了array1和array1作为索引,这是错误的。
array1表示稀疏数组的行数,而array1表示稀疏数组的列数。你应该使用array1[ i]和array1[ i]作为索引来访问稀疏数组中的行和列。
正确的代码应该是这样的:
array2]] = array1[ i];
这样,你就可以正确地将稀疏数组中的值还原到二维数组中了。 问题:在还原稀疏数组时,数组越界错误。具体来说,在循环中,当数组元素等于0时,将值存储在array2中时出现了问题。
解决方法:
1. 循环时应该使用稀疏数组的行数进行迭代,而不是数组的长度。因为稀疏数组的第一行包含数组的行数、列数和非零元素个数。
2. 在还原数组时,应该使用稀疏数组中的列和值来索引array2数组,并将值放入此索引处。
以下是修改后的代码:
public class ArrayDemo7 {
public static void main(String[] args) {
// 创建一个11*11的二维数组
int[][] array = new int;
array = 1;
array = 2;
// 转换为稀疏数组保存
// 获取有效值个数
int number = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (array != 0) { // 修正了判断条件
number++;
}
}
}
System.out.println(number);
// 创建一个稀疏数组
int[][] array1 = new int;
array1 = 11;
array1 = 11;
array1 = number;
// 遍历二维数组,将非零值,存放到稀疏数组里
int count = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (array != 0) { // 修正了判断条件
count++;
array1 = i;
array1 = j;
array1 = array; // 修正了赋值
}
}
}
// 输出稀疏数组
System.out.println("输出稀疏数组");
for (int[] row : array1) {
System.out.println(row + "\t" + row + "\t" + row);
}
// 还原
int[][] array2 = new int]];
for (int i = 1; i < array1.length; i++) {
array2]] = array1;
}
for (int[] row : array2) {
for (int val : row) {
System.out.print(val + "\t");
}
System.out.println();
}
}
}
希望这可以帮助你解决问题!
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} isdkz 发表于 2023-11-2 20:10
问题出在这一行代码上:
array2]] = array1;
我是写的array 不知道为啥他显示不了呢,我就是不知道这一行上面那个循环i为啥不能等于0啊
页:
[1]