老师请问这两段代码第20行运行步骤有什么区别?为什么会导致结果不同?
来源:1-8 编程练习
啦啦啦皮皮卡丘
2022-07-08 09:54:26
//代码1:输出结果比正确值大很多
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);
for(int i=0;i<intArray.length;i++){
System.out.println("请输入第"+(i+1)+"个学生的语文成绩");
intArray[i][0]=sc.nextInt();
System.out.println("请输入第"+(i+1)+"个学生的数学成绩");
intArray[i][1]=sc.nextInt();
}
//求语文的总成绩和平均分
int sumyy=0,aveyy=0;
int sumsx=0,avesx=0;
for(int i=0;i<intArray.length;i++){
for(int j=0;j<intArray.length-1;j++){
sumyy=sumyy+intArray[i][0];
sumsx=sumsx+intArray[i][1];
}
}
aveyy=sumyy/intArray.length;
avesx=sumsx/intArray.length;
System.out.println("语文的总成绩为:"+sumyy);
System.out.println("数学的总成绩为:"+sumsx);
System.out.println("语文的平均分为:"+aveyy);
System.out.println("数学的平均分为:"+avesx);
}
}//代码2,结果正确
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);
for(int i=0;i<intArray.length;i++){
System.out.println("请输入第"+(i+1)+"个学生的语文成绩");
intArray[i][0]=sc.nextInt();
System.out.println("请输入第"+(i+1)+"个学生的数学成绩");
intArray[i][1]=sc.nextInt();
}
//求语文的总成绩和平均分
int sumyy=0,aveyy=0;
int sumsx=0,avesx=0;
for(int i=0;i<intArray.length-1;i++){
for(int j=0;j<intArray[i].length-1;j++){
sumyy=sumyy+intArray[i][0];
sumsx=sumsx+intArray[i][1];
}
}
aveyy=sumyy/intArray.length;
avesx=sumsx/intArray.length;
System.out.println("语文的总成绩为:"+sumyy);
System.out.println("数学的总成绩为:"+sumsx);
System.out.println("语文的平均分为:"+aveyy);
System.out.println("数学的平均分为:"+avesx);
}
}1回答
好帮手慕小黑
2022-07-08
同学你好,同学的问题如下所示:
(1)在for循环语句中的条件表达式中,条件表达式不应该有-1的操作,数组中的下标是0到数组的长度(不包括数组的长度),所以不应该有-1的操作。
(2)在二维数组中同学已经将第二个下标固定书写成0和1,所以没必要书写第二层for循环,遍历数组,在代码1中只需要将第二层循环删掉,就可以使运行结果和题目要求一致。在代码1中,第二层循环体将每个数据重复相加两次,显然是不正确的。
(3)同学代码2应该删掉19行条件表达式的-1操作,然后删掉第二层循环体,就可以使程序运行结果和题目要求一致。
祝学习愉快!
相似问题