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

时间:2014-03-24 19:02:17

标签: java variables command-line-interface

有人可以帮我解决这个问题吗?

/*
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 个答案:

答案 0 :(得分:0)

没有进一步的知识(比如错误就是这样......)我的第一个猜测就是这条线是罪魁祸首。

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

我认为这是设置sub1,sub2,sub3,sub4,sub5,sub6&amp;小计到600,离开获得和GP未初始化。 (这也是一个非常罕见的代码行)

如果是这样,那么

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

可能也会将这些变量保留为未初始化。

答案 1 :(得分:0)

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

由于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的所有值)。