[英]Why do I need to initialise this?
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 Grade;”?
謝謝。
有可能沒有一個if..else if
是真的。 所以你應該要么初始化grade
,要么在底部添加一個else
條件。
您的 if/else 構造並未涵蓋所有代碼分支。 如果testScore
小於零, grade
將被統一化並且您的System.out.println
調用將失敗。
您可以將其聲明為“字符等級”,但您需要一個 else 語句。
假設你有char grade;
而不是char grade = 'A';
我們還假設, testscore
是一個負數。
編譯器將 go 超過所有 if 條件,而沒有將grade
初始化為字母。java 編譯器希望確保您在繼續之前已涵蓋所有基礎。 根據您的程序要求,我會將最后一條語句更改為else
語句而不是else if
。
Java 不知道您的testScore
永遠不會是負數(在更復雜的情況下,它無法推斷出此類信息)。 因此,可能沒有一個 if 子句成立,並且變量grade
將被統一化。
我會讓變量保持未初始化狀態,讓編譯器告訴我有一個代碼分支沒有為變量賦值。 這告訴您並非所有可能的輸入都被處理。 對於您當前的代碼,負值是 A,這是不對的。
我會添加一個額外的 else 語句,它會打印一條錯誤消息並退出。 然后編譯器將接受未初始化的變量並覆蓋所有輸入路徑(除了非數字輸入,這將在調用 nextInt() 時產生異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.