Java 在switch station上获取无法访问的语句

Java 在switch station上获取无法访问的语句,java,switch-statement,Java,Switch Statement,你好 为什么我总是出错: 不可达语句 系统输出打印项次(str); 或者我有时会发现变量str可能没有初始化 系统输出打印项次(str); 感谢帮助您得到了错误,因为您的break语句在到达sysout语句之前退出switch语句 使用sysout EXTER of switch语句。出现错误是因为break语句在到达sysout语句之前退出了switch语句 使用sysout EXTER of switch语句 不可达语句系统.out.println(str);或者我有时会发现变量str可能没

你好 为什么我总是出错:

不可达语句 系统输出打印项次(str); 或者我有时会发现变量str可能没有初始化 系统输出打印项次(str);
感谢帮助

您得到了错误,因为您的break语句在到达sysout语句之前退出switch语句


使用sysout EXTER of switch语句。

出现错误是因为break语句在到达sysout语句之前退出了switch语句

使用sysout EXTER of switch语句

不可达语句系统.out.println(str);或者我有时会发现变量str可能没有初始化

就您的问题而言,这是“无法访问的声明”,因为
System.out.println(str)
案例7
中,在
中断之后,因此无法访问它

如果在关闭
开关
后将其移动到应该的位置,您将得到“变量str可能尚未初始化”,因为如果
日期
不是
开关
案例
中的任何值,这是正确的,因为这可能不是用户输入

我会把
System.out.println(str)
开关之后
并向开关添加
默认值

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);
    }
  }
}
这将防止两种错误。(或者在您的特定情况下,您可以使用不同的异常,或者只输出一条消息,然后返回;
退出
main
,因为这是用户输入。)

为清晰起见,以下是现场的这些变化:

default:
    throw new IllegalStateException("'day' cannot have the value " + day);
不可达语句系统.out.println(str);或者我有时会发现变量str可能没有初始化

就您的问题而言,这是“无法访问的声明”,因为
System.out.println(str)
案例7
中,在
中断之后,因此无法访问它

如果在关闭
开关
后将其移动到应该的位置,您将得到“变量str可能尚未初始化”,因为如果
日期
不是
开关
案例
中的任何值,这是正确的,因为这可能不是用户输入

我会把
System.out.println(str)
开关之后
并向开关添加
默认值

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);
    }
  }
}
这将防止两种错误。(或者在您的特定情况下,您可以使用不同的异常,或者只输出一条消息,然后返回;
退出
main
,因为这是用户输入。)

为清晰起见,以下是现场的这些变化:

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


把它移到下面一行。它仍然在一个
开关中
System.out.println(str)
案例7
中,在
中断
语句之后…为什么投票失败?这是一个正确而明确的问题。如果别人觉得这个问题很愚蠢,请记住,每个人都是在某个时间点开始的,每个人都有愚蠢的错误,而你却忽略了好几个小时。@Korashen不是一个愚蠢的问题,但对这个网站来说也不是一个有效的问题。检查投票原因:此问题是由无法再复制的问题或简单的印刷错误引起的。虽然类似的问题可能在这里的主题,这是一个解决的方式不太可能帮助未来的读者。这通常可以通过在发布前确定并仔细检查重现问题所需的最短程序来避免。不要认为这是一个打字风格的问题(我一开始是这样做的,直到我仔细阅读)。OP被夹在两个不同的编译错误之间,不知道如何处理它。更多的问题是不了解开关的工作原理。请将其移到下面一行。它仍然在一个
开关中
System.out.println(str)
案例7
中,在
中断
语句之后…为什么投票失败?这是一个正确而明确的问题。如果别人觉得这个问题很愚蠢,请记住,每个人都是在某个时间点开始的,每个人都有愚蠢的错误,而你却忽略了好几个小时。@Korashen不是一个愚蠢的问题,但对这个网站来说也不是一个有效的问题。检查投票原因:此问题是由无法再复制的问题或简单的印刷错误引起的。虽然类似的问题可能在这里的主题,这是一个解决的方式不太可能帮助未来的读者。这通常可以通过在发布前确定并仔细检查重现问题所需的最短程序来避免。不要认为这是一个打字风格的问题(我一开始是这样做的,直到我仔细阅读)。OP被夹在两个不同的编译错误之间,不知道如何处理它。更多的问题是不了解
开关如何工作。
中断
不会终止程序。它只是退出了
switch
语句。您似乎仍然在说问题在于程序退出了。这不是问题所在。在最新的编辑中,您已经解释了其中一个错误的原因以及如何修复它。但很明显,鉴于他们询问的另一个错误,OP尝试了这一点。另外:请不要滥用区块报价。我想感谢您的宝贵建议。我将在未来努力保持这一点。。。谢谢:)谢谢你们。。我得到了一个解决方案,
break
不会终止程序。它只是退出了
switch
语句。您似乎仍然在说问题在于程序退出了。这不是问题所在。在最新的编辑中,您已经解释了其中一个错误的原因以及如何修复它。但很明显,鉴于他们询问的另一个错误,OP尝试了这一点。另外:请不要滥用区块报价。我想感谢您的宝贵建议。我将在未来努力保持这一点。。。谢谢:)谢谢你们。。我得到了一个解决方案很好的彻底解释很好的彻底解释