Почему мне нужно инициализировать это? - PullRequest
1 голос
/ 14 июня 2011
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';" перед моим утверждением "если", а не просто объявив его "char grade;"?

Спасибо.

Ответы [ 5 ]

8 голосов
/ 14 июня 2011

Есть вероятность, что ни один из if..else if не соответствует действительности. Поэтому вам следует либо инициализировать grade, либо добавить условие else внизу.

6 голосов
/ 14 июня 2011

Ваша конструкция if / else не охватывает все ветви кода.Если testScore меньше нуля, grade будет унифицирован, и ваш System.out.println вызов не удастся.

3 голосов
/ 14 июня 2011

вы можете объявить его как "char char", но вам нужен оператор else.

Допустим, у вас было char grade; вместо char grade = 'A';

Скажем также, гипотетически, testscore было отрицательным числом.

Компилятор прошел бы все ваши условия if без инициализации grade в букву. Java-компилятор хочет убедиться, что все ваши базы покрыты, прежде чем вы сможете продолжить. В зависимости от требований вашей программы я бы изменил последний оператор на оператор else вместо else if.

1 голос
/ 14 июня 2011

Я бы оставил переменную неинициализированной и дал бы компилятору сообщить мне, что есть ветвь кода, которая не присваивает значение переменной. Это говорит о том, что не все возможные входы обрабатываются. При вашем текущем коде отрицательное значение - A, что неверно.

Я бы добавил дополнительный оператор else, который печатает сообщение об ошибке и завершает работу. Затем компилятор примет неинициализированную переменную и охватит все входные пути (за исключением нечислового ввода, что вызовет исключение при вызове nextInt ().

1 голос
/ 14 июня 2011

Java не знает, что ваш testScore никогда не бывает отрицательным (и в более сложных случаях он не может вывести такую ​​информацию).Таким образом, может случиться так, что ни одно из условий if не будет выполнено, и переменная grade будет унифицирована.

...