2011-06-14 131 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()時產生異常。)

相關問題