java错误修改,越界异常,如何修改,

import java.util.Scanner;

public class Main {

    static Scanner in = new Scanner(System.in);

    static int width=0;      // 宽度

    static int height=0;     // 高度

    static int[][] field_old;  // 旧的网格

    static int[][] field_new;  // 新的网格

    static int times;          // 步数

    public static void main(String[] args) {

        // 首先输入两个正整数,范围为[3,102],依次表示网格的宽度和高度。

        width=in.nextInt();

        height=in.nextInt();

        // 初始化数组

        initial();

        // 然后,以一个正整数,范围为[1,10000],表示要求细胞自动机执行的步数。

        times=in.nextInt();

        // 细胞自动机执行

        run(times);

        System.out.println(count(field_old));// 输出一个正整数,表示执行完毕后,剩下的活着的细胞的数量。

    }

    // 初始化数组

    public static void initial() {

        field_old=new int[height][width];

        field_new=new int[height][width];

        for(int i=0; i<field_old.length; i++) {

            for(int j=0; j<field_old[i].length; j++) {

                field_old[i][j]=0;

                field_new[i][j]=0;

            }

        }

        // 然后输入多组正整数,依次表示一个活着的细胞的网格位置,每组数字中,第一个表示行号,第二个表示列号,均从0开始编号。

        while (true) {

            int i=in.nextInt();

            int j=in.nextInt();

            if (i==-1&&j==-1) {

                break;// 最后,以“-1 -1”表示不再有活着的细胞。-1 -1不是有效的位置。

            }

            field_old[i][j] = 1;

            field_new[i][j] = 1;

        }

    }

    // 细胞自动机执行

    public static void run(int times) {

        int number;

        for(int i=0; i<times; i++) {

            for(int j=0; j<field_old.length; j++) {

                for(int k=0; k<field_old[j].length; k++) {

                    number = getNeighbour(j, k);// 计算周围活着的细胞

                    if (field_old[j][k]==1 && (number==2||number==3)) {

                        field_new[j][k]=1;

                    } else {

                        field_new[j][k]=0;

                    }

                    if (field_old[j][k]==0&&number==3) {

                        field_new[j][k]=1;

                    }

                }

            }

            for(int j=0; j<field_new.length; j++) {

                for(int k=0; k<field_new[j].length; k++) {

                    field_old[j][k]=field_new[j][k];// 把新的复制到旧的

                }

            }

        }

    }

    // 计算周围活着的细胞

    public static int getNeighbour(int i, int j) {

        int number;

        if (i==0&&j==0) {// 左上角

            number=field_old[i][j+1]+field_old[i+1][j+1]+field_old[i+1][j];

        } else if (i==0&&j==width-1) {// 右上角

            number = field_old[i][j-1] + field_old[i+1][j-1] + field_old[i+1][j];

        } else if (i== height -1&&j==0) {// 左下角

            number = field_old[i-1][j] + field_old[i-1][j+1] + field_old[i][j+1];

        } else if (i== height -1 && j == width - 1) {// 右下角

            number = field_old[i-1][j] + field_old[i-1][j-1] + field_old[i][j-1];

        } else if (i== 0) {// 首行其他

            number = field_old[i][j-1] + field_old[i+1][j-1] + field_old[i+1][j] + field_old[i+1][j+1]

                    + field_old[i][j+1];

        } else if (i== height - 1) {// 末行其他

            number = field_old[i][j-1] + field_old[i-1][j-1] + field_old[i-1][j] + field_old[i-1][j+1]

                    + field_old[i][j+1];

        } else if (j== 0) {// 最左其他

            number = field_old[i-1][j] + field_old[i-1][j+1] + field_old[i][j+1] + field_old[i+1][j+1]

                    + field_old[i + 1][j];

        } else if (j== width - 1) {// 最右其他

            number = field_old[i-1][j] + field_old[i-1][j-1] + field_old[i][j-1] + field_old[i+1][j-1]

                    + field_old[i+1][j];

        } else {// 其他

            number = field_old[i-1][j-1] + field_old[i-1][j] + field_old[i-1][j+1] + field_old[i][j+1]

                    + field_old[i+1][j+1] + field_old[i+1][j] + field_old[i+1][j-1] + field_old[i][j-1];

        }

        return number;

    }

    // 剩下的活着的细胞的数量

    public static int count(int[][] field) {

        int number = 0;

 

        for (int i = 0; i < field.length; i++) {

            for (int j = 0; j < field[i].length; j++) {

                if (field[i][j] == 1) {

                    number++;

                }

            }

        }

        return number;

    }

}

 

具体哪一行提示的错误,这个是越界异常。

我试了下你的代码,你定义的前面的长度,后面去获取,不可以大于之前的数的,比如输入 4 ,3 ,1,2 就不会数组越界。

你输入 1,2,3,4就会越界,因为的长度是1与2 ,你确要取 3、4的下标的值,肯定报错

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632