请问这段代码出了什么问题呢?
来源: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回答
同学你好,1. 建议同学把Scanner对象的创建放在循环外,避免重复创建,占用内存资源。
2. intArray[i].length的长度为1,所以内循环只会循环一次,则变量j为0,然后在计算平均分时,执行intArray[j][1]出现ArrayIndexOutOfBoundsException异常(数组越界异常)。修改代码建议同学参考下方实现思路:
定义一个3行2列的二维数组,用于存放3名学生的语文和数学成绩。定义两个变量,分别用于记录语文总成绩和数学总成绩。然后使用循环,循环3次,每次接收1名学生的语文和数学成绩,并将接收的语文和数学成绩分别添加到语文总成绩和数学总成绩中。修改后代码如下所示:

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);
}如果我的回答解决了你的疑惑,请采纳。祝学习愉快~
相似问题