关于2维数组脚标的问题 用嵌套循环给2维数组每列赋值时的逻辑问题
1 | i问题描述:mport java.util.Scanner;<br>public class ArrayTest {<br>public static void main(String[] args) {<br> // 定义一个三行两列的整型二维数组intArray<br> int[][] intArray=new int[3][2];<br> // 从键盘输入学生成绩,要求输入顺序与效果图一致<br> Scanner sc=new Scanner(System. in );<br> for (int i = 0; i<intArray.length; i++){<br> System.out.print( "请输入第" +(i+1)+ "个学生的语文成绩: " );<br> intArray[i][0]=sc.nextInt(); <br> for (int j = 0; j<intArray[i].length-1; j++){<br> System.out.print( "请输入第" +(i+1)+ "个学生的数学成绩: " );<br> intArray[i][1]=sc.nextInt(); // <----为什么intArray[i][j]=sc.nextInt() 不行;<br> }<br> }<br> 相关代码: // 求语文的总成绩和平均分<br> // 求数学的总成绩和平均分<br> int sumL = 0;<br> int sumM = 0;<br> int AvgL = 1 ;<br> int AvgM = 1;<br> for (int i = 0; i<intArray.length; i++){<br> for (int j = 0; j<intArray[i].length-1; j++){<br> sumL = sumL+intArray[i][0]; <br> sumM = sumM+intArray[i][1];<br> }<br> }<br> AvgL = sumL /intArray .length;<br> AvgM = sumM /intArray .length;<br> System.out.println( "语文总成绩为: " +sumL);<br> System.out.println( "语文平均分为: " +AvgL);<br> System.out.println( "数学总成绩为: " +sumM);<br> System.out.println( "数学总成绩为: " +AvgM);<br>}<br>}<br> |
请问
1. 为何用--->intArrary[i][j]sc.nextInt()导致计算有问题. 用intArray[i][1]=sc.nextInt();却ok
2. 我的给数组循环赋值的时候是否有逻辑漏洞?
25
收起
正在回答 回答被采纳积分+1
2回答
好帮手慕小尤
2021-01-07 17:13:57
同学你好,1. for(int j = 0; j<intArray[i].length-1; j++) 此循环会进入循环一次,如下:
intArray[i].length-1等于1,则第一次循环,当j=0时,0<,符合条件,进入循环。为intArray[i][0]赋值。然后进行j++。
第二次循环,j=1,1<1不符合条件,结束循环,
综上所述,for(int j = 0; j<intArray[i].length-1; j++)只会为intArray[i][0]赋值,从而导致其他数据错误。
2. 根据同学的代码,直接为intArray[i][0]与intArray[i][1]赋值即可,则建议同学优化代码,使用一层循环,实现键盘输入与计算总成绩。修改后代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public static void main(String[] args) { //定义一个三行两列的整型二维数组intArray int [][] intArray= new int [ 3 ][ 2 ]; // 定义sumL、sumM变量 int sumL = 0 ; int sumM = 0 ; //从键盘输入学生成绩,要求输入顺序与效果图一致 Scanner sc= new Scanner(System.in); for ( int i = 0 ; i<intArray.length; i++){ System.out.print( "请输入第" +(i+ 1 )+ "个学生的语文成绩: " ); intArray[i][ 0 ]=sc.nextInt(); System.out.print( "请输入第" +(i+ 1 )+ "个学生的数学成绩: " ); intArray[i][ 1 ]=sc.nextInt(); // 求语文的总成绩 sumL = sumL+intArray[i][ 0 ]; // 求数学的总成绩 sumM = sumM+intArray[i][ 1 ]; } //求语文的平均分 //求数学的平均分 int AvgL = 1 ; int AvgM = 1 ; AvgL = sumL/intArray.length; AvgM = sumM/intArray.length; System.out.println( "语文总成绩为: " +sumL); System.out.println( "语文平均分为: " +AvgL); System.out.println( "数学总成绩为: " +sumM); System.out.println( "数学总成绩为: " +AvgM); } |
祝学习愉快!
java工程师2020版
- 参与学习 人
- 提交作业 9403 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧