【问题标题】:got a unreachable statement on switch statment在 switch 语句中有一个无法访问的语句
【发布时间】:2018-05-23 14:53:15
【问题描述】:
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); 感谢您的帮助

【问题讨论】:

  • 将它移到下一行。它仍然在switch
  • System.out.println(str);case 7 内部,在break 语句之后...
  • 为什么投反对票?这是一个有效而明确的问题。如果别人觉得它很愚蠢,请记住,每个人都在某个时间点开始,每个人都有你忽略了几个小时的愚蠢错误。
  • @Korashen 不是一个愚蠢的问题,但对于这个网站也不是一个有效的问题。检查投票理由:此问题是由无法再复制的问题或简单的印刷错误引起的。虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能帮助未来的读者。这通常可以通过在发布之前确定并仔细检查重现问题所需的最短程序来避免。
  • 不要认为这是一个错字式的问题(我一开始是这样,直到我更仔细地阅读)。 OP 夹在两个不同的编译错误之间,不知道如何处理它。更多的问题是不了解switch 的工作原理。

标签: java switch-statement


【解决方案1】:

无法到达的语句 System.out.println(str);或者我有时 GET 变量 str 可能没有被初始化

根据您的问题,这是“无法访问的声明”,因为System.out.println(str)case 7 内位于break 之后,因此无法访问。

如果你把它移到它应该在的地方,在switch 的关闭} 之后,你会得到“变量str 可能没有被初始化”,因为如果day 不存在,那就是真的switchcases 中的值,很可能不是因为这是用户输入。

我将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);
}

【讨论】:

  • 很好的详尽解释
【解决方案2】:

您收到错误是因为您的 break 语句在到达 sysout 语句之前退出了 switch 语句。

在 switch 语句之外使用 sysout。

【讨论】:

  • break 不会终止程序。它只是退出switch 语句。
  • 您似乎仍然在说问题在于程序退出。这不是问题。
  • 在最新的编辑中,您已经解释了 一个 错误的原因以及如何修复它。但显然,考虑到他们询问的 other 错误,OP 尝试了这一点。另外:请不要滥用引用。
  • 我要感谢您的宝贵建议。我将在未来努力保持这一点...谢谢:)
  • 谢谢大家 .. 我找到了解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多