为什么我写的代码在这个上面执行报错,在eclipse上就没有问题呀?

为什么我写的代码在这个上面执行报错,在eclipse上就没有问题呀?

public class ScoreDemo{
   public static void main(String[] args){
     int[][] arr=new int[3][2];
     for(int i=0;i<arr.length;i++){
         for(int j=0;j<arr[i].length;j++){
             if(j==0){
                 System.out.println("请输入第"+(i+1)+"个学生的语文成绩:");
                 Scanner sc=new Scanner(System.in);
                 arr[i][j]=sc.nextInt();
             }
             if(j==1){
                 System.out.println("请输入第"+(i+1)+"个学生的数学成绩:");
                 Scanner sc=new Scanner(System.in);
                 arr[i][j]=sc.nextInt();
             }
         }
     }
    
     int a=0;
     int b=0;
     int c=0;
     int d=0;
     int i=0;
     int j=0;
    
     for(int i=0;i<arr[i].length;i++){
         for(int j=0;j<arr.length;j++){
             if(j==0){
                 a=a+arr[j][i];
             }
             if(j==1){
                 c=c+arr[j][i];
             }
         }
     }
     System.out.println("语文的总成绩为:"+a);
     b=a/arr.length;
     System.out.println("语文的平均分为:"+b);
     System.out.println("数学的总成绩为:"+c);
     d=c/arr.length
     System.out.println("数学的平均分为:"+d);
   }
}



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
qq_慕后端6458515 2020-07-19 17:34:49

我觉得键盘输如直接写为:java.util.Scanner cs = new java.util.Scanner(System.in);这样会更加直接,还不容易错;还有一点就是这条语句不能重复引用“int temp=cs.nextInt();”

int[][] intArray =new int[3][2];
           //从键盘输入学生成绩,要求输入顺序与效果图一致
            
            
//            int intArray[i][1]=cs.nextInt();
            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)+"个学生的语文成绩:"); 
                    
                    }else {
                        System.out.println("请输入第"+(i+1)+"个学生的数学成绩:");
                        
                    }
                    java.util.Scanner cs =new java.util.Scanner(System.in);
                    int temp=cs.nextInt();
                    intArray[i][j]=temp;
            }
            }
            int sum1=0;
            int avg1=0;
            for(int i=0;i<intArray.length;i++) {
                sum1+=intArray[i][0];
                avg1=sum1/(intArray[i].length+1);
                
            }
            System.out.println("语文的总成绩为:"+sum1);
            System.out.println("语文的平均分为:"+avg1);
            int sum2=0;
            int avg2=0;
            for(int i=0;i<intArray.length;i++) {
                sum2+=intArray[i][1];
                avg2=sum2/(intArray[i].length+1);
                
            }
            System.out.println("数学的总成绩为:"+sum2);
            System.out.println("数学的平均分为:"+avg2);


慕丝1539783 2020-07-10 08:57:05

第一点:

没有引入import java.util.Scanner;

第二点:

     int i=0;
     int j=0;
     
     for(int i=0;i<arr[i].length;i++){
         for(int j=0;j<arr.length;j++){
             if(j==0){
                 a=a+arr[j][i];
             }
             if(j==1){
                 c=c+arr[j][i];
             }
         }
     }

在for循环前面,已经定义了i和j,for循环内部,又重新定义了i和j,导致重复定义变量。

第三点:

for(int i=0;i<arr[i].length;i++){
    for(int j=0;j<arr.length;j++){
    }
}

第二次的嵌套for循环,完全不理解是什么意思,为什么外层for循环i<arr[i].length?

第二次的嵌套for循环格式,可以照搬第一次的。

for(int i=0;i<arr.length;i++){
    for(int j=0;j<arr[i].length;j++){
    }
}

第四点:

a=a+arr[j][i];
c=c+arr[i][j];

你已经设置i为外层循环,j为内层循环,数组应该是arr[i][j]。

  • 提问者 你在想屁吃呢 #1
    for循环里定义变量i和j只在当前循环里有效,所以第二次定义i和j的时候应该是没有问题的 至于第三点和第四点我感觉就是个人理解的不一样,其实效果都一样 我对比了下就是没有引入import java.util.Scanner; 还是谢谢你的分析,辛苦辛苦
    2020-07-26 23:45:15
你在想屁吃呢 提问者 2020-07-10 00:01:26

d=c/arr.length; 这个地方我加分号了,没有复制上

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师