簡體   English   中英

為什么我需要初始化它?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM