计算机小混子 2023-01-08 00:38 采纳率: 100%
浏览 115
已结题

java 报错Index 1 out of bounds for length 0

java报错Index 1 out of bounds for length 0


package com.atguigu.sparsearray;

public class Aparsearray {
    public static void main(String[] args)
    {
        //创建一个原始的二维数组 11*11
        //0代表没有棋子,1代表黑子,2代表蓝子
        int chessArr1[][] = new int [11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        chessArr1[4][5] = 2;
        //输出原始的二维数组
        System.out.println("原始的二维数组~~");
        for(int [] row:chessArr1) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();//每打印一行换行
        }

        //将二维数组转稀疏数组的思路
        //1.先遍历二维数组 得到非0数据的个数
        int sum = 0;
        for(int i = 0;i<11 ;i++)
        {
            for(int j = 0;j<11;j++)
            {
                if(chessArr1[i][j]!=0){
                    sum++;
                }

            }
        }
        System.out.println("sum="+sum);

        //2.创建对应的稀疏数组
        int sparseArr[][] = new int [sum+1][3];
        //给稀疏数组赋值
        sparseArr[0][0] = 11;
        sparseArr[0][1] = 11;
        sparseArr[0][2] = sum;

        //遍历二维数组,将二维数组非0值存到稀疏数组中
        int count = 0;//count用于记录是第几个非0数据
        for(int i = 0;i<11 ;i++)
        {
            for(int j = 0;j<11;j++)
            {

                if(chessArr1[i][j]!=0){
                    count++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr1[i][j];
                }

            }
        }


        //输出稀疏数组的形式
        System.out.println();//换行
        System.out.println("得到的稀疏数组为~~~~~");
        for (int i = 0; i <sparseArr.length ; i++) {
            System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
        }
        System.out.println();


        //将稀疏数组恢复成原始的二维数组
        //1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
        int chessArr2[][] = new int[chessArr1[0][0]][chessArr1[0][1]];

        //2.在读取稀疏数组后几行的数据,并赋值给原始的二维数组即可
        for(int i = 1;i<sparseArr.length;i++)
        {
            chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        //输出恢复后的二维数组
        System.out.println();
        System.out.println("恢复后的二维数组");

        for(int [] row:chessArr2) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();//每打印一行换行
        }




    }
}

  • 写回答

3条回答 默认 最新

  • 君易大大 2023-01-09 10:29
    关注

    打个断点就知道了,chessArr2越界是因为初始值是0,初始为0是因为拿错数组去赋值了。

    把第77行chessArr2初始化的地方改成使用sparseArr就对了,其实你的本意已经在上一行注释了,“ 先读取稀疏数组的第一行”,而稀疏数组应该是sparseArr,chessArr1是原二维数组,这里拿错了

            //将稀疏数组恢复成原始的二维数组
            //1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
            // int chessArr2[][] = new int[chessArr1[0][0]][chessArr1[0][1]];
            int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
    
            //2.在读取稀疏数组后几行的数据,并赋值给原始的二维数组即可
            for(int i = 1;i<sparseArr.length;i++)
            {
                chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月21日
  • 已采纳回答 1月13日
  • 专家已采纳回答 1月12日
  • 创建了问题 1月8日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。