java重新运行程序不能使用do while循环

时间:2014-03-06 22:46:45

标签: java do-while

刚开始java,eclipse

我希望程序只在按下'y'或'Y'时才能继续

如果按任何其他键结束程序

请帮助

import java.io.*;


public class TicketMaster{

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

    char choice;

    do{
        choice ='\0'; //clear char
        System.out.println("First Test \t\t" + choice);

        //rerun program
        System.out.println("Run Program Again: ");
        choice = (char) System.in.read();

        //testing
        if(choice == 'y' || choice == 'Y')
            System.out.println("Contine \t\t" + choice);
        else
            System.out.println("End Program \t\t" + choice);


        System.out.println("\n\n\n");
    }
    while(choice == 'y' || choice == 'Y');


} //end main method
} //end class

4 个答案:

答案 0 :(得分:2)

问题似乎是即使输入'Y''y',程序也会结束。

原因是在按 Enter 之前,不会向Java发送任何输入。这会在输入流上放置整行输入和换行符。

while循环的第一次迭代正确识别'y''Y',但下一个循环立即运行并检测到不匹配的换行符。< / p>

切换到使用Scanner so you can can call nextLine()一次读取整行输入,您可以提取String的第一个字符,看它是'y'还是{{1} }。这将丢弃换行符。

答案 1 :(得分:1)

使用此代码:

    if(choice == 'y' || choice == 'Y')
        System.out.println("Contine \t\t" + choice);
    else{
        System.out.println("End Program \t\t" + choice);
        System.exit(0);
    }

或者如果您不希望程序完全退出,只是为了打破while循环

    if(choice == 'y' || choice == 'Y')
        System.out.println("Contine \t\t" + choice);
    else{
        System.out.println("End Program \t\t" + choice);
        break;
    }

答案 2 :(得分:0)

由于read只读取InputStream中的单个字符,因此您需要手动使用换行符

choice = (char) System.in.read();
System.in.read(); // added - consumes newline

答案 3 :(得分:0)

可悲的是,Java通常不支持我认为你要做的事情,我认为这是在控制台上检测按键,而不是按Enter键。有关如何实现这一目标的讨论,请参见this answer