2011-06-14 132 views
1
import java.util.Scanner; 

class Practice { 

public static void main(String args[]) {   


    System.out.println("Please enter your test score: "); 
    Scanner enteredScore = new Scanner(System.in); 
    int testScore = (enteredScore.nextInt()); 


    char grade = 'A';   

    if (testScore >= 90) { 
     grade = 'A';    
    }     
    else if (testScore >= 80) { 
     grade = 'B'; 
    }     
    else if (testScore >= 70) { 
     grade = 'C'; 
    }   
    else if (testScore >= 60) { 
     grade = 'D'; 
    }   
    else if (testScore >= 0) { 
     grade = 'U'; 
    } 


    System.out.println("Your grade is a " + grade + "."); 

} 
} 

有人可以向我解释为什么我必须初始化“char grade ='A';”在我的“if”声明之前,而不是简单地声明它,“char等级”?为什么我需要初始化?

谢谢。

回答

6

您的if/else构造不包含所有代码分支。如果testScore小于零,则grade将被单元化并且您的System.out.println调用将失败。

8

有可能没有一个if..else if是真的。因此,您应该初始化grade或在底部添加else条件。

1

Java不知道你的testScore永远不是负面的(在更复杂的情况下它不能推断出这些信息)。因此,可能没有任何if条款成立,变量grade将被单元化。

3

你可以声明它为“char等级”,但你需要一个else语句。

比方说,你有char grade;,而不是char grade = 'A';

我们还假设,假设,testscore是一个负数。

如果没有将grade初始化为一个字母,编译器会越过所有条件。java编译器希望确保在继续之前覆盖您的所有基础。根据您的程序要求,我会将最后的声明更改为else声明,而不是else if

1

我将保留变量未初始化,并让编译器告诉我,有一个代码分支不会为变量赋值。这告诉你并不是所有可能的输入都被处理。当前代码的负值是A,这是不正确的。

我会添加一个额外的else语句来打印错误消息并退出。然后,编译器将接受未初始化的变量,并且覆盖所有输入路径(期望输入非数字,这会在调用nextInt()时产生异常。)

相关问题