Java 在接收输入的特定字符时停止循环

Java 在接收输入的特定字符时停止循环,java,loops,Java,Loops,我编写了将大写字母更改为小写字母的代码,反之亦然。我正在尝试使用中断,以便在输入为”时退出循环。,但它似乎不起作用。任何建议都将不胜感激!我还想创建循环结束前重复的所有时间的计数。我该怎么做呢 public static void main(String[] args) throws java.io.IOException { char choice, ignore = 0; for (; ; ) { do { System.out.pr

我编写了将大写字母更改为小写字母的代码,反之亦然。我正在尝试使用
中断
,以便在输入为
”时退出循环。
,但它似乎不起作用。任何建议都将不胜感激!我还想创建循环结束前重复的所有时间的计数。我该怎么做呢

public static void main(String[] args) throws java.io.IOException {

    char choice, ignore = 0;
    for (; ; ) {
        do {
            System.out.print("Please enter a upper or " + "lower case letter(. to quit)");
            choice = (char) System.in.read();
            if ((char) choice > 64) {
                ignore = (char) (choice + 32);
            }
            if ((char) choice > 96) {
                ignore = (char) (choice - 32);
            }
            System.out.print(ignore);
            System.out.println("\n");
            if (choice == '.') {
                break;
            }
            do {
                ignore = (char) System.in.read();
            } while (ignore != '\n');
        } while ((char) choice > 64 | (char) choice < 123 | choice != '.');
    }
}
publicstaticvoidmain(字符串[]args)抛出java.io.IOException{
字符选择,忽略=0;
对于(;;){
做{
System.out.print(“请输入大写字母或“+”小写字母(.to quit)”);
choice=(char)System.in.read();
如果((字符)选项>64){
忽略=(字符)(选项+32);
}
如果((字符)选项>96){
忽略=(字符)(选项-32);
}
系统输出打印(忽略);
System.out.println(“\n”);
如果(选项=='。){
打破
}
做{
ignore=(char)System.in.read();
}while(忽略!='\n');
}而((char)choice>64 |(char)choice<123 | choice!=');
}
}

在永久for循环中有一个do-while循环。
break
语句将使您脱离do-while循环,但您仍然处于for循环中。它将再次重新进入do while循环并继续运行

问题是您有一个嵌套循环。(;;)的
将不会退出,因为
中断
将仅从以下位置退出:

do {
    //other code
} while ((char) choice > 64 | (char) choice < 123 | choice != '.');
这样,当达到
中断
时,您的代码将退出
do while
,并在下一个循环中退出
while


请记住,使用此技术,您必须使用值初始化
选项。

即使while循环中断,for循环也会永远运行。一种修复方法是在for循环中添加终止条件

 for (; choice != '.'; ) 

请确保初始化choice变量,否则它将在编译期间抛出错误。

stackoverflow.com/q/886955/4793951 打破标签
谢谢@锆石

对(;;)
循环使用do-while循环,而不是
应该更好地组合逻辑,以避免需要中断的“无限循环”。如果使用嵌套循环,循环应有条件结束。请参阅以获取建议。@zron该问题可能会回答这里的主要问题,但OP应该去掉外环来解决他的问题,因为问题是外环,而不是
中断
@Tom我同意,链接问题中的答案也建议这样做。
 for (; choice != '.'; )