尚未初始化变量问题

尚未初始化变量问题

import java.util.Scanner;
public class HomeWork{
    //显示菜单的方法
    public void menu(){
        System.out.println("*****************************************");
        System.out.println("       1--初始化数学成绩");
        System.out.println("       2--求成绩的平均值");
        System.out.println("       3--统计成绩大于85分的人数");
        System.out.println("       4--修改指定位置处的成绩");
        System.out.println("       5--打印输出所有成绩");
        System.out.println("       0--退出");
        System.out.println("*****************************************");
}
    //初始化数学成绩的方法
    public float[] score() {
        Scanner input=new Scanner(System.in);    
        System.out.println("请输入要存储的数学成绩的数量:");
            int num=0;
            while(true){
            try{num=input.nextInt();
            }catch(java.util.InputMismatchException e){
            System.out.println("输入的格式有误,或有小数或非数字!");
            input.next();
            }
            if(num>0){
                break;
            }
        }
        float[] score=new float[num];
        for(int a=0;a<num;a++){
                System.out.println("请输入第"+(a+1)+"个数据:");    
                try{score[a]=input.nextFloat();
                }catch(java.util.InputMismatchException e){
                    System.out.println("输入的格式有误,或有小数或非数字!");
                    input.next();    
                    a--;
                }
        }
        
        return score;
}
    //求平均值的方法
    public float average(float[] f) {
        float sum=0;
        for(float n: f){
            sum=sum+n;
        }
        float ave=sum/f.length;
        return ave; 
    }  

    //求分数大于85分的人数的方法
    public int count(float[] f) {
        int count;
        for(float n : f){
            if(n>85){
                count++;
            }
        }
        return count;
}
    public static void main(String [] args){
        HomeWork sc=new HomeWork();
        sc.menu();
        float[] stuScore=sc.score();
        float ave=sc.average(stuScore);
        int highScore=sc.count(stuScore);
        System.out.println(highScore);
}
}如代码所示,当我不对求分数大于85分的方法里的count初始化变量,运行报错,这是为什么?不仅是count,包括其他方法里的变量,不初始化就报错,这是为什么?


正在回答

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

4回答

同学你好,如图所示:http://img1.sycdn.imooc.com//climg/5cb0643700012dc506340171.jpghttp://img1.sycdn.imooc.com//climg/5cb0644100016f9f06190192.jpg当局部变量定义时未赋值,之后程序中赋值语句可以,其他地方使用该变量时会报错。如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

吃吃吃鱼的猫 2019-04-12 17:20:27

同学你好,成员变量是可以不用给初始值的,默认就有一个初始值。而局部变量,必须显示给予一个初始值。否则如果在之后直接使用的话,编译无法通过。关于同学这个问题,http://img1.sycdn.imooc.com//climg/5cb0579600015cfb04660118.jpg有一种情况,变量在之后的代码中并没有使用到,这时程序确实不会报错。但此变量的声明也就没有了意义。如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师你弄错了,我声明没赋值,但是使用了,没报错
    2019-04-12 17:52:08
  • 提问者 鱼儿0001 #2
    既然都说没报错,肯定是使用后发现没报错,不然就是狼来了的故事,像是我知道草莓很好吃,但是我没吃过。这是矛盾,之所以没报错,是因为我使用了,你好纠结字眼啊
    2019-04-12 17:54:38
  • 提问者 鱼儿0001 #3
    老师,关于这里的变量初始化问题,我还是上传代码吧,不然我们都在讨论抽象问题,谢谢!
    2019-04-12 17:59:31
吃吃吃鱼的猫 2019-04-12 16:50:33

同学你好,那是因为这些局部变量在switch,for循环中首先经过了赋值,然后才能使用正常。如果这些变量不被赋值,仍然会报错。如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    没有啊,有些变量只声明没赋值,没报错啊
    2019-04-12 16:58:09
  • 提问者 鱼儿0001 #2
    而且,请老师回答我上面最开始提出的问题吧,谢谢。 是所有变量都要赋值吗,什么情况下变量不需要不赋值
    2019-04-12 17:00:38
燃_11 2019-04-12 15:45:47
局部变量不会自动初始化赋0,你在声明的不赋值直接count++就会报错
  • 提问者 鱼儿0001 #1
    可是有些局部变量在主方法只是声明,并未赋值。在for循环里.switch结构里使用正常,没有报错,这是为什么
    2019-04-12 16:40:40
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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