我写了一个猜数字的程序,但是在运行时候出了问题,猜完第一轮,问是否继续。按y,它不能正常运行第二轮。
在运行cmd 下编译时可以运行第二轮,但是再第三轮以后按 n 退出时不能退出。我觉得应该是  System.in.skip(2); 没能跳过回车的问题。我把 “2”改为“4”了也没有用
麻烦各位帮我看一下,代码如下:/**
 * 名称:猜数字
 * 功能:输入1~100的数,错了提示大小;
 *   3次后结束,并询问是否继续
 * 
 * BUG :3次后,输入y(继续)时不能继续。
 *   应该是:"System.in.skip(2);" 没有跳过回车导致
 */import java.io.*;class GuessNumBreak{
public static void main(String args[])throws IOException{

boolean again=false;loop1: do{
int trueNum = (int)(Math.random()*100);//产生随机数
System.out.println("游戏开始了!");
int i=3;

do{
System.out.println("请输入0~100之间的整数:(退出游戏请按N)");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "";
int guessNum=0;

try{
     str = br.readLine();
}catch(IOException e){
     e.printStackTrace();
}

if(str.equalsIgnoreCase("N")){ //用户输入字母n 
break loop1; //跳出外层循环,结束游戏
}
else {
guessNum = Integer.parseInt(str);
}

if (guessNum==trueNum) {
System.out.println("恭喜您!猜中了!");
break;
}
else {
if(guessNum>trueNum) {System.out.println("很遗憾偏大了!"+guessNum);}
else {System.out.println("很遗憾偏小了!");}
i--;
System.out.println("您还有"+i+"次机会");
}

     }while(i>0);
     
if(i==0){
System.out.println("很遗憾,您未猜中,正确数字为:"+trueNum+"\n游戏结束");
}

System.out.println("\n 是否重新开始(Y/N)?");
char ch =(char)System.in.read();
System.in.skip(2); //跳过回车
if((ch=='y')||(ch=='Y')) {again=true;}
else {again=false;}
}while(again);

}
}

解决方案 »

  1.   

    可以用Scanner来输入,这样就不会有上面的问题了!具体的楼主可以自己试试,输入的时候用字符串,然后判断是否和n或y相同!
      

  2.   

    /**
     * @fileName T8.java
     * @author 杨礼凯
     * @date 2010/10/24
     * @function 随机给出一个0~99(包括0和99)的数字,然后让你猜是什么数字。
     * 你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。经过几次猜测与提示
     * 后,最终推出答案。在游戏过程中,记录你最终猜对时所需要的次数,游戏结束后公布结果。
     *
     */
    import java.util.*;
    public class T8 {
    public static void main(String[] args)
    {
    Scanner input=new Scanner(System.in);
    int j=1;
    int random=(int)(Math.random()*100);
    System.out.println(random);
    System.out.println("我心里有一个0到99之间的整数,你猜是什么?");
    for(int i=0;i<=20;i++)
    {
    int num=input.nextInt();
    if(num>random)
    {
    System.out.println("大了点,再猜!");
    j++;
    }
    else if(num<random)
    {
    System.out.println("小了点,再猜!");
    j++;
    }
    else if(num==random)
    {
    System.out.println("猜对了!");
    if(j<=1)
    {
    System.out.println("你太有才了!");
    break;
    }
    else if(j>=2&&j<=6)
    {
    System.out.println("这么快就猜出来了,很聪明么!");
    break;
    }
    else if(j>7)
    {
    System.out.println("猜了半天才猜出来,小同志,尚需努力啊!");
    break;
    }
    }
    }
    System.out.println("--------------------------");
    System.out.println("到游戏结束一共猜了"+j+"次");
    }}正好我刚也写了个猜数字的游戏.
    感觉跟你的差不多,LZ可以参考下,希望对你有用
      

  3.   


    我把那段改成了这样,不知道对不对:System.out.println("\n 是否重新开始(Y/N)?");
    Scanner scan = new Scanner(System.in);
    String ch = scan.nextLine();
    System.out.println("\n" + ch + "\n");
    try{
    if((ch.equals('y'))||(ch.equals('Y'))) {again=true;}
    if((ch.equals('n'))||(ch.equals('N'))) {again=false;}
    }catch(Exception e){
    e.toString();
    }但是,运行的结果是,不论输入什么,全部都是退出游戏,也没有错误信息
      

  4.   


    我是在 JCreator 下编译的,不能玩第2轮
    在 cmd 下边可以玩第2轮,但是从第3轮开始,当问“是否继续”时输入 “n”也不能退出
      

  5.   

    String ch=br.readLine();
    if((ch=="y")||(ch=="Y")) {//双引号
    again=true;}
                else {again=false;}