请问这段代码出了什么问题呢?

来源:1-8 编程练习

maxmac

2020-09-17 15:04:52

	public static void main(String[] args) {
		// 从键盘输入三名学生的成绩存储到二维数组中,分别求语文和数学的总成绩及平均分并输出
		//定义一个三行两列的整型二维数组
		int[][] intArray=new int[2][1];
		//定义语文总成绩、数学总成绩、平均分
		int chinesesum=0;
		int mathsum=0;
		int chineseaverage=0,mathaverage=0;
		//外重循环控制3个学生
		for(int i=0;i<intArray.length;i++) {
		    for(int j=0;j<intArray[i].length;j++) {
		    	//从键盘输入成绩
				Scanner sc=new Scanner(System.in);
				if(j==0) {
					System.out.println("请输入第i个学生的语文成绩:");
					intArray[i][j]=sc.nextInt();
				}else {
					System.out.println("请输入第i个学生的数学成绩:");
					intArray[i][j]=sc.nextInt();
				}
		    }	
		}
		//求语文总成绩、数学总成绩、平均分
		for(int i=0;i<intArray.length;i++) {
			chinesesum+=intArray[i][0];
			chineseaverage=chinesesum/intArray.length;			
		}
		for(int j=0;j<intArray[0].length;j++) {
			mathsum+=intArray[j][1];
			mathaverage=mathsum/intArray[0].length;			
		}
		System.out.println("语文的总成绩为:"+chinesesum);
		System.out.println("语文的平均分为:"+chineseaverage);
		System.out.println("数学的总成绩为:"+mathsum);
		System.out.println("数学的平均分为:"+mathaverage);
	}

}


写回答

1回答

好帮手慕小尤

2020-09-17

同学你好,1. 建议同学把Scanner对象的创建放在循环外,避免重复创建,占用内存资源。

2. intArray[i].length的长度为1,所以内循环只会循环一次,则变量j为0,然后在计算平均分时,执行intArray[j][1]出现ArrayIndexOutOfBoundsException异常(数组越界异常)。修改代码建议同学参考下方实现思路:

    定义一个3行2列的二维数组,用于存放3名学生的语文和数学成绩。定义两个变量,分别用于记录语文总成绩和数学总成绩。然后使用循环,循环3次,每次接收1名学生的语文和数学成绩,并将接收的语文和数学成绩分别添加到语文总成绩和数学总成绩中。修改后代码如下所示:

http://img.mukewang.com/climg/5f631e7f09cacc7509490668.jpg

public static void main(String[] args) {
		// 从键盘输入三名学生的成绩存储到二维数组中,分别求语文和数学的总成绩及平均分并输出
		//定义一个三行两列的整型二维数组
		int[][] intArray = new int[3][2];
		//定义语文总成绩、数学总成绩、平均分
		int chinesesum=0;
		int mathsum=0;
		int chineseaverage=0,mathaverage=0;
		//从键盘输入成绩
		Scanner sc=new Scanner(System.in);
		//外重循环控制3个学生
		for (int i = 0; i < intArray.length; i++) {

			System.out.println("请输入第" + (i + 1) + "个学生的语文成绩");
			intArray[i][0] = sc.nextInt();
			chinesesum += intArray[i][0];
			System.out.println("请输入第" + (i + 1) + "个学生的数学成绩");
			intArray[i][1] = sc.nextInt();
			mathsum += intArray[i][1];
		}
		//求语文总成绩、数学总成绩、平均分、
		chineseaverage=chinesesum/intArray.length;	
		mathaverage=mathsum/intArray.length;

		System.out.println("语文的总成绩为:"+chinesesum);
		System.out.println("语文的平均分为:"+chineseaverage);
		System.out.println("数学的总成绩为:"+mathsum);
		System.out.println("数学的平均分为:"+mathaverage);
	}

如果我的回答解决了你的疑惑,请采纳。祝学习愉快~

0

0 学习 · 16556 问题

查看课程