请老师检查并帮忙提供更有效简洁的答案或者思路!谢谢
来源:1-8 编程练习
C_LANNAD
2019-12-03 10:45:02
import java.util.Scanner;
public class ScoreDemo{
public static void main(String[] args){
//定义一个三行两列的整型二维数组intArray
int[][] intArray=new int[3][2];
Scanner sc =new Scanner(System.in);
int sum1=0,sum2=0,avg1=0,avg2=0;
//从键盘输入学生成绩,要求输入顺序与效果图一致
for(int i=0;i<intArray.length;i++){
for(int j=0;j<intArray[i].length;j++){
if(j==0)
{ System.out.println("请输入第"+(i+1)+"个同学的语文成绩:");
intArray[i][j]=sc.nextInt();}
else
{System.out.println("请输入第"+(i+1)+"个同学的数学成绩:");
intArray[i][j]=sc.nextInt();}
if(j==0){sum1+=intArray[i][0];
avg1=sum1/3;}
sum2+=intArray[i][1];
avg2=sum2/3;
}
}
//求语文的总成绩和平均分
System.out.println("语文总成绩:"+sum1);
System.out.println("语文平均分:"+avg1);
//求数学的总成绩和平均分
System.out.println("数学总成绩:"+sum2);
System.out.println("数学平均分:"+avg2);
}
}
2回答
同学你好。代码总体完成的不错呢,再接再厉~
1、代码中可以优化的点,内层for循环内,一个循环中的j是相同的,所以不需要判断两次,直接在nextInt接收到值后,按不同的课程累加即可。
2、我们使用二维数组的列代表了哪些课程,标号从0开始,在题目的描述中,0代表语文成绩、1代表数学成绩。由于这里的二维数组中不能存储课程名,所以只能表示出确定个数的课程,然后在代码中判断是哪一列,借此来知道是对应哪个课程。
3、综上所述,如果只是想要有几门确定的课程数,还用二维数组存储的方式的话,只需要在if 后使用else if 接着判断即可。例如三门课程,需要3行3列的数组,可以修改为:
for(int i=0;i<intArray.length;i++){
for(int j=0;j<intArray[i].length;j++){
if(j==0){
System.out.println("请输入第"+(i+1)+"个同学的语文成绩:");
intArray[i][j]=sc.nextInt();
sum1 += intArray[i][j];
}else if(j==1){
System.out.println("请输入第"+(i+1)+"个同学的数学成绩:");
intArray[i][j]=sc.nextInt();
sum2 += intArray[i][j];
}else{
System.out.println("请输入第"+(i+1)+"个同学的英语成绩:");
intArray[i][j]=sc.nextInt();
sum3 += intArray[i][j];
}
}
}
//求语文的总成绩和平均分
System.out.println("语文总成绩:"+sum1);
System.out.println("语文平均分:"+sum1/intArray.length);
//求数学的总成绩和平均分
System.out.println("数学总成绩:"+sum2);
System.out.println("数学平均分:"+sum2/intArray.length);
//求英语的总成绩和平均分
System.out.println("英语总成绩:"+sum3);
System.out.println("英语平均分:"+sum3/intArray.length);如果解答了同学的疑问,望采纳~
祝学习愉快~
C_LANNAD
提问者
2019-12-03
这里只有2门课程 所以可以用if(J==0)还可以用 如果大于2门课程程序就不适用了 有能满足任意课程数通用的代码吗
相似问题