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

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

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

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小小 2021-07-20 18:54:19

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

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

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

http://img1.sycdn.imooc.com//climg/60f6a4b909e4773d06870374.jpg

http://img1.sycdn.imooc.com//climg/60f6a70109a9a88507560235.jpg

代码修改建议:

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

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

http://img1.sycdn.imooc.com//climg/60f6a7900943e95c10410223.jpg

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

http://img1.sycdn.imooc.com//climg/60f6a8d00969b93d06330418.jpg

祝学习愉快~

  • 提问者 linux天下无敌 #1

    老师你好,

    谢谢老师,我用我的方法和你教的方法,都做出来了。会了两种方法,谢谢老师,虽然我的比较麻烦。

    2021-07-21 11:03:58
  • 提问者 linux天下无敌 #2

    知道问题所在了。把数组长度和下标问题搞混了

    2021-07-21 11:05:08
  • 提问者 linux天下无敌 #3

    知道自己问题所在,因为把数组长度和下标搞混了。

    2021-07-21 11:06:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师