没有报错,但是显示下标出界了

来源:1-8 编程练习

linux天下无敌

2021-07-20 18:03:41

import java.util.Scanner;


public class zy {


public static void main(String[] args) {

int[][] intArray;

intArray=new int[3][2];

int[] n=new int[3];

int[] m=new int[3];

    Scanner s=new Scanner(System.in);

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

    System.out.println("请输入第"+(i+1)+"个学生的语文成绩:");

    n[i]=s.nextInt();

    System.out.println("请输入第"+(i+1)+"个学生的数学成绩:");

    m[i]=s.nextInt();

    }  

    intArray[0][0]=n[1];

    intArray[0][1]=m[1];

    intArray[1][0]=n[2];

    intArray[1][1]=m[2];

    intArray[2][0]=n[3];

    intArray[2][1]=m[3];

    int sum=0,num=0,pj=0;

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

sum=sum+intArray[i+1][0];

System.out.println("语文总成绩"+sum);

pj=sum/3;

System.out.println("语文平均成绩"+sum);

num=num+intArray[i+1][1];

System.out.println("数学总成绩"+num);

pj=num/3;

System.out.println("数学平均成绩"+num);

     }

  }


}


写回答

1回答

好帮手慕小小

2021-07-20

同学你好,数组下标范围为:0~数组长度减一,代码中会出现下标越界的地方有两个,如下

1、m、n数组下标范围为0~2,所以m[3]、n[3]会出现数组下标越界异常。

2、intArray[i][j]:i 范围为0~2,j 范围为0~1,而计算总成绩的循环中i+1最大为3,也会出现数组下标越界异常。

http://img.mukewang.com/climg/60f6a4b909e4773d06870374.jpg

http://img.mukewang.com/climg/60f6a70109a9a88507560235.jpg

代码修改建议:

1、同学可直接在第一个循环中为intArray数组赋值,可不单独定义m、n数组。

2、代码中将输出语句及pj定义在第二个数组中,每执行一次循环都会计算一次平均成绩,并执行输出语句效果如下:

http://img.mukewang.com/climg/60f6a7900943e95c10410223.jpg

建议同学将输出语句及计算平均成绩放在循环外面,修改后的代码如下:

http://img.mukewang.com/climg/60f6a8d00969b93d06330418.jpg

祝学习愉快~

0
hinux天下无敌
hp>知道自己问题所在,因为把数组长度和下标搞混了。

h021-07-21
共3条回复

0 学习 · 9886 问题

查看课程