Java 控制流条件

Java 控制流条件,java,conditional-statements,Java,Conditional Statements,若应用了条件满足和中断语句,我无法理解为什么For循环会继续执行 代码: 类ProgramControlStatements{ 公共静态void main(字符串[]args)引发java.io.IOException{ System.out.println(“菜单:”); System.out.println(“选项:”); 系统输出打印项次(“1:If/Else”); System.out.println(“2:开关”); 对于(int i=0;ib 计算机控制语句:开关 没有有效的选项 第

若应用了条件满足和中断语句,我无法理解为什么For循环会继续执行

代码:

类ProgramControlStatements{
公共静态void main(字符串[]args)引发java.io.IOException{
System.out.println(“菜单:”);
System.out.println(“选项:”);
系统输出打印项次(“1:If/Else”);
System.out.println(“2:开关”);
对于(int i=0;i<5;i++){
选择选项();
};
};
静态void chooseOption()引发java.io.IOException{
char choice=(char)System.in.read();
开关(选择){
案例“a”:
System.out.println(“计算机控制语句:If/Else”);
打破
案例“b”:
System.out.println(“计算机控制语句:开关”);
打破
违约:
System.out.println(“无有效选项”);
};
}
}
预期结果:

Menu: 
Choice: 
1: If/Else
2: Switch
a
Computer control statement: If/Else
b
Computer control statement: Switch
a
Computer control statement: If/Else
b
Computer control statement: Switch
a
Computer control statement: If/Else
如果选择了chara,则打印“If/Else”并等待下一次输入,直到i a 计算机控制语句:If/Else

没有有效的选项

第二次输入->b 计算机控制语句:开关

没有有效的选项

第三输入->a 计算机控制语句:If/Else

节目结束

我希望跳过默认语句,因为应用了break语句。 当System.in.read()返回新行时,是否会发生这种情况?
我认为从那时起,同样的行为也会发生;执行while循环吗?

这是由于悬挂的换行符造成的。只需添加
System.in.read()以使用悬空换行符,例如
(char)System.in.read()
仅使用
a
,而不使用
a
之后按的输入字符

public class Main {
    public static void main(String[] args) throws java.io.IOException {
        System.out.println("Menu: ");
        System.out.println("Choice: ");
        System.out.println("1: If/Else");
        System.out.println("2: Switch");
        for (int i = 0; i < 5; i++) {
            chooseOption();
        }
    }

    static void chooseOption() throws java.io.IOException {
        char choice = (char) System.in.read();
        System.in.read();// Add this line
        switch (choice) {
        case 'a':
            System.out.println("Computer control statement: If/Else");
            break;
        case 'b':
            System.out.println("Computer control statement: Switch");
            break;
        default:
            System.out.println("No valid option");
        }
    }
}

这是因为悬垂的断线角色。只需添加
System.in.read()以使用悬空换行符,例如
(char)System.in.read()
仅使用
a
,而不使用
a
之后按的输入字符

public class Main {
    public static void main(String[] args) throws java.io.IOException {
        System.out.println("Menu: ");
        System.out.println("Choice: ");
        System.out.println("1: If/Else");
        System.out.println("2: Switch");
        for (int i = 0; i < 5; i++) {
            chooseOption();
        }
    }

    static void chooseOption() throws java.io.IOException {
        char choice = (char) System.in.read();
        System.in.read();// Add this line
        switch (choice) {
        case 'a':
            System.out.println("Computer control statement: If/Else");
            break;
        case 'b':
            System.out.println("Computer control statement: Switch");
            break;
        default:
            System.out.println("No valid option");
        }
    }
}

这并不像@Arvind Kumar Avinash所说的那么简单,根据你的情况,你可能会在每一行后面遇到
\r
(回车)、
\n
(新行)或两者都遇到
\r\n

因此,仅仅添加另一个
System.in.read()
行是一种可能并不总是有效的解决方法

我建议改为使用,如下所示:


LE:作为对评论中请求的回答,我想指定,当我想要解析输入时,我总是尝试使用
Scanner
,而不介意性能。当我考虑性能时,我使用
BufferedReader
。切勿直接在系统中输入
。您可以在这里提供的答案中阅读更多内容。

这并不像@Arvind Kumar Avinash所说的那么容易,根据您的不同,您可能会在每一行后面遇到
\r
(回车)、
\n
(新行)或两者
\r\n

因此,仅仅添加另一个
System.in.read()
行是一种可能并不总是有效的解决方法

我建议改为使用,如下所示:


LE:作为对评论中请求的回答,我想指定,当我想要解析输入时,我总是尝试使用
Scanner
,而不介意性能。当我考虑性能时,我使用
BufferedReader
。切勿直接在系统中输入
。您可以在这里提供的答案中阅读更多内容。

我相信答案是目前为止提供的两个答案的组合

为了快速解决问题,@Arvind Kumar Avinash非常好

当@Valdrinium指定替代方案时,可能会考虑更多问题

我对选择@Arvind Kumar Avinash作为最终版本持怀疑态度,尽管它解决了本例中的问题


管理员可以帮忙吗?

我相信答案是目前为止提供的两个答案的组合

为了快速解决问题,@Arvind Kumar Avinash非常好

当@Valdrinium指定替代方案时,可能会考虑更多问题

我对选择@Arvind Kumar Avinash作为最终版本持怀疑态度,尽管它解决了本例中的问题


管理员可以帮忙吗?

谢谢。回答得很好。你能指给我看一下悬垂的断线字符吗。我不知道我是否理解你是最受欢迎的。我对我的答案做了更多的解释。在Valdrinium的答案之后,我想我们应该定义一个更深刻的答案?我是否应该提出另一个关于扫描仪与系统类的问题,并在那里解决这个问题?谢谢。回答得很好。你能指给我看一下悬垂的断线字符吗。我不知道我是否理解你是最受欢迎的。我对我的答案做了更多的解释。在Valdrinium的答案之后,我想我们应该定义一个更深刻的答案?我是否应该提出另一个关于扫描仪与系统类的问题,并在那里解决这个问题?好提示!我一直在试图理解为什么我应该使用System.in.read()和Scanner。我知道Scanner类,并在需要输入时使用它。你能告诉我为什么以及什么时候使用System.in.read vs Scanner吗?谢谢你提供的关于结束行语句的链接。我是否应该提出另一个问题,为什么/什么时候我应该使用System Class方法。in.read vs Scanner Class?如果您想要更详细的解释,我认为这是一个好主意,因为我找不到,我会这样做,谢谢。当我完成问题后,将更新此聊天中的链接。海诺洛克:好提示!我一直在试图理解为什么我应该使用System.in.read()和Scanner。我知道Scanner类,并在需要输入时使用它。你能告诉我为什么以及什么时候使用System.in.read vs Scanner吗?谢谢你提供的关于结束行语句的链接。我是否应该提出另一个问题,为什么/何时应该使用系统类方法。