получил недостижимое заявление о статусе переключателя - PullRequest
0 голосов
/ 23 мая 2018
import java.util.Scanner;
public class Program{
public static void main(String[] args){
    int day;
    int month = 5;
    int year = 2018;
    String str;
    Scanner s = new Scanner(System.in);
    day = s.nextInt();
    switch(day) {
        case 1:
            str = "Sunday";
        break;

        case 2:
            str = "Monday";
        break;

        case 3:
            str = "Tuesday";
        break;

        case 4:
            str = "Wednesday";
        break;

        case 5:
            str = "Thursday";
        break;

        case 6:
            str = "Friday";
        break;

        case 7:
            str = "Saturday";
        break;

     System.out.println(str);
    }
  }
}

Привет, почему я держу сообщение об ошибке:

недостижимая инструкция System.out.println (str);ИЛИ НЕ ИМЕЕТ GET переменная str, возможно, не инициализирована System.out.println (str);Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

недостижимая инструкция System.out.println (str);ИЛИ Я ИНОГДА ПОЛУЧИЛ переменную str, возможно, не было инициализировано

С тем, что у вас есть в вашем вопросе, это «недостижимое утверждение», потому что System.out.println(str) находится в пределах case 7 после break, поэтомуне может быть достигнуто.

Если переместить его туда, где он должен быть, после закрытия } switch, вы получите «переменная str, возможно, не была инициализирована», потому что этоtrue, если day не является каким-либо из значений в switch s case s, что вполне может быть не так, как это пользовательский ввод.

Я бы поставил System.out.println(str); после switch и добавьте default к коммутатору:

default:
    throw new IllegalStateException("'day' cannot have the value " + day);

Это предотвратит обе ошибки.(Или в вашем конкретном случае вы можете использовать другое исключение или просто вывести сообщение, а затем return; для выхода main, поскольку это ввод пользователя.)

Вот эти изменения на месте, дляясность:

public static void main(String[] args){
    int day;
    int month = 5;
    int year = 2018;
    String str;
    Scanner s = new Scanner(System.in);
    day = s.nextInt();
    switch(day) {
        case 1:
            str = "Sunday";
        break;

        case 2:
            str = "Monday";
        break;

        case 3:
            str = "Tuesday";
        break;

        case 4:
            str = "Wednesday";
        break;

        case 5:
            str = "Thursday";
        break;

        case 6:
            str = "Friday";
        break;

        case 7:
            str = "Saturday";
        break;

        default:
            throw new IllegalStateException("'day' cannot be " + day);
    }
    System.out.println(str);
}
0 голосов
/ 23 мая 2018

Вы получили ошибку, потому что ваш оператор break выходит из оператора switch до достижения оператора sysout.

используйте sysout вне оператора switch.

...