忆北 发表于 2023-11-2 20:10:20

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();
      }
    }
}

isdkz 发表于 2023-11-2 20:10:49

问题出在这一行代码上:

array2]] = array1;

在这里,你试图将稀疏数组array1中的值还原到二维数组array2中。但是,你在这里使用了array1和array1作为索引,这是错误的。

array1表示稀疏数组的行数,而array1表示稀疏数组的列数。你应该使用array1[ i]和array1[ i]作为索引来访问稀疏数组中的行和列。

正确的代码应该是这样的:

array2]] = array1[ i];

这样,你就可以正确地将稀疏数组中的值还原到二维数组中了。

Mike_python小 发表于 2023-11-2 20:11:35

问题:在还原稀疏数组时,数组越界错误。具体来说,在循环中,当数组元素等于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:}

忆北 发表于 2023-11-2 20:43:00

isdkz 发表于 2023-11-2 20:10
问题出在这一行代码上:

array2]] = array1;


我是写的array 不知道为啥他显示不了呢,我就是不知道这一行上面那个循环i为啥不能等于0啊
页: [1]
查看完整版本: java 数组越界问题