2014-03-06 23 views
0

刚开始的Java,Eclipse将的Java重新运行程序做while循环

我希望程序contine只有当“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 

回答

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; 
    } 
+0

你仍然没有在每次迭代之间做出选择。如果你输入yyyy并回车,循环将重复4次,然后执行(或循环)结束。 –

0

由于read只读取单个字符的InputStream,你将需要手动消耗换行符

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

的问题似乎是,即使进入'Y''y'程序结束。

原因是没有输入将被发送到Java,直到您按输入。这将在输入流中放置一整行输入和一个换行符。

while循环的第一次迭代正确识别'y''Y',但下一个循环立即运行和检测换行字符(多个)不匹配。

切换到使用Scanner so you can can call nextLine()可以一次读取输入的整条生产线,并可以提取看到String的第一个字符,如果是'y''Y'。这将丢弃换行符。

+0

+1使用扫描仪 – justderb

0

不幸的是,Java通常不支持我认为你正在尝试做的事情,我相信这是在控制台上检测到一个按键,而没有按下回车键。讨论如何实现这一点,请参阅this answer