有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java GPA计算器错误变量可能未初始化?

有人能帮我解决这个问题吗

/*
author: M Asad Raza
date: 18/03/2014
*/

Code:-

import java.util.Scanner;

    class GPACalculator { 
        public static void main(String args[]) {
            Scanner input = new Scanner(System.in);

            double sub1,sub2,sub3,sub4,sub5,sub6,subtotal=100*6,obtained,GP;
            double gp1,gp2,gp3,gp4,gp5,gp6;
            String name;    
                System.out.println("   \n***Welcome to GPA Calculator***\n");
                System.out.print("Enter your good name: ");
                name=input.nextLine();
                System.out.println("\n**Hello "+name+" :)\n");
                System.out.print("Enter Subject#1 marks: ");
                sub1=input.nextInt();
                if(sub1>100){
                System.out.println("Marks exceeded from the limit.\nTry agian..!!");
                System.exit(0);
                }
                if(sub1<45){
                System.out.println("Subject failed!!\nGPA can't be calculated.");
                System.exit(0);
                }
                System.out.print("Enter Subject#2 marks: ");
                sub2=input.nextInt();
                if(sub2>100){
                System.out.println("Marks exceeded from the limit.\nTry agian..!!");
                System.exit(0);
                }
                if(sub2<45){
                System.out.println("Subject failed!!\nGPA can't be calculated.");
                System.exit(0);
                }
                System.out.print("Enter Subject#3 marks: ");
                sub3=input.nextInt();
                if(sub3>100){
                System.out.println("Marks exceeded from the limit.\nTry agian..!!");
                System.exit(0);
                }
                if(sub3<45){
                System.out.println("Subject failed!!\nGPA can't be calculated.");
                System.exit(0);
                }
                System.out.print("Enter Subject#4 marks: ");
                sub4=input.nextInt();
                if(sub4>100){
                System.out.println("Marks exceeded from the limit.\nTry agian..!!");
                System.exit(0);
                }
                if(sub4<45){
                System.out.println("Subject failed!!\nGPA can't be calculated.");
                System.exit(0);
                }
                System.out.print("Enter Subject#5 marks: ");
                sub5=input.nextInt();
                if(sub5>100){
                System.out.println("Marks exceeded from the limit.\nTry agian..!!");
                System.exit(0);
                }
                if(sub5<45){
                System.out.println("Subject failed!!\nGPA can't be calculated.");
                System.exit(0);
                }
                System.out.print("Enter Subject#6 marks: ");
                sub6=input.nextInt();
                if(sub6>100){
                System.out.println("Marks exceeded from the limit.\nTry agian..!!");
                System.exit(0);
                }
                if(sub6<45){
                System.out.println("Subject failed!!\nGPA can't be calculated.");
                System.exit(0);
                }

                //Calculating GPA
                if(sub1>=85&&sub1<=100) {
                gp1=4.00;
                }

                if(sub1>=80&&sub1<=84) {
                gp1=3.70;
                }
                if(sub1>=75&&sub1<=79) {
                gp1=3.30;
                }
                if(sub1>=70&&sub1<=74) {
                gp1=3.00;
                }
                if(sub1>=65&&sub1<=69) {
                gp1=2.70;
                }
                if(sub1>=60&&sub1<=64) {
                gp1=2.30;
                }
                if(sub1>=55&&sub1<=59) {
                gp1=2.00;
                }
                if(sub1>=50&&sub1<=54) {
                gp1=1.70;
                }
                if(sub1>=45&&sub1<=49) {
                gp1=1.00;
                }
                //*****sub1 gp1 finished
                if(sub2>=85&&sub2<=100) {
                gp2=4.00;
                }
                if(sub2>=80&&sub2<=84) {
                gp2=3.70;
                }
                if(sub2>=75&&sub2<=79) {
                gp2=3.30;
                }
                if(sub2>=70&&sub2<=74) {
                gp2=3.00;
                }
                if(sub2>=65&&sub2<=69) {
                gp2=2.70;
                }
                if(sub2>=60&&sub2<=64) {
                gp2=2.30;
                }
                if(sub2>=55&&sub2<=59) {
                gp2=2.00;
                }
                if(sub2>=50&&sub2<=54) {
                gp2=1.70;
                }
                if(sub2>=45&&sub2<=49) {
                gp2=1.00;
                }
                //***** sub2 gp2 finished
                if(sub3>=85&&sub3<=100) {
                gp3=4.00;
                }
                if(sub3>=80&&sub3<=84) {
                gp3=3.70;
                }
                if(sub3>=75&&sub3<=79) {
                gp3=3.30;
                }
                if(sub3>=70&&sub3<=74) {
                gp3=3.00;
                }
                if(sub3>=65&&sub3<=69) {
                gp3=2.70;
                }
                if(sub3>=60&&sub3<=64) {
                gp3=2.30;
                }
                if(sub3>=55&&sub3<=59) {
                gp3=2.00;
                }
                if(sub3>=50&&sub3<=54) {
                gp3=1.70;
                }
                if(sub3>=45&&sub3<=49) {
                gp3=1.00;
                }
                //*****sub3 gp3 finished
                if(sub4>=85&&sub4<=100) {
                gp4=4.00;
                }
                if(sub4>=80&&sub4<=84) {
                gp4=3.70;
                }
                if(sub4>=75&&sub4<=79) {
                gp4=3.30;
                }
                if(sub4>=70&&sub4<=74) {
                gp4=3.00;
                }
                if(sub4>=65&&sub4<=69) {
                gp4=2.70;
                }
                if(sub4>=60&&sub4<=64) {
                gp4=2.30;
                }
                if(sub4>=55&&sub4<=59) {
                gp4=2.00;
                }
                if(sub4>=50&&sub4<=54) {
                gp4=1.70;
                }
                if(sub4>=45&&sub4<=49) {
                gp4=1.00;
                }
                //*****gp4 sub4 finished
                if(sub5>=85&&sub5<=100) {
                gp5=4.00;
                }
                if(sub5>=80&&sub5<=84) {
                gp5=3.70;
                }
                if(sub5>=75&&sub5<=79) {
                gp5=3.30;
                }
                if(sub5>=70&&sub5<=74) {
                gp5=3.00;
                }
                if(sub5>=65&&sub5<=69) {
                gp5=2.70;
                }
                if(sub5>=60&&sub5<=64) {
                gp5=2.30;
                }
                if(sub5>=55&&sub5<=59) {
                gp5=2.00;
                }
                if(sub5>=50&&sub5<=54) {
                gp5=1.70;
                }
                if(sub5>=45&&sub5<=49) {
                gp5=1.00;
                }
                //***** sub5 gp5 finished
                if(sub6>=85&&sub6<=100) {
                gp6=4.00;
                }
                if(sub6>=80&&sub6<=84) {
                gp6=3.70;
                }
                if(sub6>=75&&sub6<=79) {
                gp6=3.30;
                }
                if(sub6>=70&&sub6<=74) {
                gp6=3.00;
                }
                if(sub6>=65&&sub6<=69) {
                gp6=2.70;
                }
                if(sub6>=60&&sub6<=64) {
                gp6=2.30;
                }
                if(sub6>=55&&sub6<=59) {
                gp6=2.00;
                }
                if(sub6>=50&&sub6<=54) {
                gp6=1.70;
                }
                if(sub6>=45&&sub6<=49) {
                gp6=1.00;
                }

                //End Calculating GPA

                obtained=sub1+sub2+sub3+sub4+sub5+sub6;
                GP=gp1+gp2+gp3+gp4+gp5+gp6;
                GP=GP/6;
                System.out.println("\n\n******Information******\n");
                System.out.println("Total Marks = "+subtotal+"\n"+"Obtained marks = "+obtained+"\n"+"Percentage = "+(obtained/subtotal)*100);
                System.out.println("GPA = "+GP);
                System.out.println("\n***********************");

        }       
    }

共 (2) 个答案

  1. # 1 楼答案

    编译器无法知道变量是否已初始化,除非您在声明变量时显式初始化它们,或者确保代码中的每个路径在使用它们之前都对它们进行了初始化

    因为0.0似乎不是适合变量的默认值,所以应该使用if...else if...else控制语句,而不是简单的if语句

    //Calculating GPA
    if(sub1>=85) {
        gp1=4.00;
    }
    else if(sub1>=80&&sub1<=84) {
        gp1=3.70;
    }
    else if(sub1>=75&&sub1<=79) {
        gp1=3.30;
    }
    else if(sub1>=70&&sub1<=74) {
        gp1=3.00;
    }
    else if(sub1>=65&&sub1<=69) {
        gp1=2.70;
    }
    else if(sub1>=60&&sub1<=64) {
        gp1=2.30;
    }
    else if(sub1>=55&&sub1<=59) {
        gp1=2.00;
    }
    else if(sub1>=50&&sub1<=54) {
        gp1=1.70;
    }
    else { // (sub1>=45&&sub1<=49)
        gp1=1.00; // or some other value when sub1 < 45?
    }
    

    请注意,编译器在编译时不知道sub1不允许超出范围45-100。您需要确保gp1所有可能的分支中初始化(对于sub1的所有值)

  2. # 2 楼答案

    没有进一步的了解(例如错误是什么…)我的第一个猜测是这条线是罪魁祸首

    double sub1,sub2,sub3,sub4,sub5,sub6,subtotal=100*6,obtained,GP;
    

    我认为这是设置了sub1、sub2、sub3、sub4、sub5、sub6&;小计至600,并保留已获得且未初始化的GP。(这也是一行非常罕见的代码)

    如果是这样,那么

    double gp1,gp2,gp3,gp4,gp5,gp6;
    

    也可能使这些变量未初始化