最简单且有BUG的一段
package com.zzk.cn; import java.util.*; public class GuestNum { public static void main(String[] ags) { int i; int num = (int) (Math.random() * 100); int b; String answer; Scanner input = new Scanner(System.in); System.out.println("请猜 0~100中间的数字"); for (i = 1; i <= 10; i++) { b = input.nextInt(); if (b < num) { System.out.println("小了!请继续!"); continue; } else if (b > num) { System.out.println("大了!晴继续!"); continue; } else { System.out.println("猜对了!"); } switch (i) { case 1: System.out.println("你太有才了"); break; case 2: case 3: case 4: case 5: case 6: System.out.println("这么快就猜出来了"); break; case 7: case 8: case 10: System.out.println("半天才才出来"); break; } } } }
请猜 0~100中间的数字
50
大了!晴继续!
25
小了!请继续!
35
小了!请继续!
40
小了!请继续!
45
小了!请继续!
46
小了!请继续!
47
小了!请继续!
48
小了!请继续!
49
猜对了!
BUG在于:1.要是猜了10次没猜出来,没有提示,程序直接卡死
2.没有显示猜数用了多少时间
3.功能不全,仅仅是比较,而没有用二分查找的算法
修改了一下,增加了计数功能:
package com.zzk.cn; import java.util.*; public class GuestNum { public static void main(String[] ags) { int i; int num = (int) (Math.random() * 100); int b; String answer; Scanner input = new Scanner(System.in); System.out.println("请猜 0~100中间的数字"); for (i = 1; i <= 10; i++) { b = input.nextInt(); if (b < num) { System.out.println("小了!请继续!"); continue; } else if (b > num) { System.out.println("大了!晴继续!"); continue; } else { System.out.println("猜对了!"); } switch (i) { case 1: System.out.println("你太有才了"); break; case 2: case 3: case 4: case 5: case 6: System.out.println("这么快就猜出来了"); break; case 7: case 8: case 10: System.out.println("半天才才出来"); break; } System.out.println("您一共猜了"+i+"次"); } } }
请猜 0~100中间的数字
50
小了!请继续!
75
大了!晴继续!
60
大了!晴继续!
56
大了!晴继续!
54
大了!晴继续!
52
大了!晴继续!
51
猜对了!
半天才才出来
您一共猜了7次
看了网上的一些资料,修改总结,优化代码如下:
package com.zzk.cn; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class GuessGame { public static void compareNum() { int count=1; try { //获取随机产生的数字 int random=(int)(Math.random()*100+1); for(int i=1;;i++) { //使用BufferedReader读入数据流 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("请猜数"); int keyBoardNum=Integer.parseInt(br.readLine());//获取键盘输入的数字 //比较两数的大小 if(keyBoardNum!=random) { if(keyBoardNum>random) { System.out.println("大了,请继续"); } else { System.out.println("小了,请继续"); } count++; } else { System.out.println("随机数是"+random); System.out.println("您猜了"+count+"次"); System.out.println("恭喜你猜对了,你的战斗力是:"+(float)(1-i/10.0)*100); break; } if(i>=10) { System.out.println("超过次数,尚需努力"); System.out.println("正确答案是:"); break; } } }catch (Exception e) { System.out.println("输入错误,请重新输入"); } } public static void GameSet() { System.out.println("游戏难度设置:1:容易 2.一般 3.难"); int select=getInput(); switch(select) { case 1:Easy();break; case 2:Middle();break; case 3:Difficult();break; default:System.out.println("程序结束"); return; } } public static int getInput() { int res=-1; try { Scanner x=new Scanner(System.in); res=x.nextInt(); }catch(Exception e) { System.out.println("非法输入,请重新选择:"); } return res; } public static void Easy() { int count=1; int random=(int)(Math.random()*100+1); try { for(int i=1;;i++) { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("请猜数"); int keyBoardNum=Integer.parseInt(br.readLine()); if(keyBoardNum!=random) { if(keyBoardNum>random) { System.out.println("大了,请继续"); } else { System.out.println("小了,请继续"); } count++; } else { System.out.println("随机数是"+random); System.out.println("您一共猜了"+count+"次"); System.out.println("恭喜你猜对了,你的战斗力是:"+(1-(i-1)/10.0)*100); break; } if(i>=10) { System.out.println("超过次数,尚需努力"); System.out.println("正确答案是:"); break; } } }catch(Exception e) { System.out.println("输入错误,请重新输入:"); } } public static void Middle() { int count=1; try { int random=(int)(Math.random()*100+1); for(int i=1;;i++) { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("请猜数"); int keyBoardNum=Integer.parseInt(br.readLine()); if(keyBoardNum!=random) { if(keyBoardNum>random) { System.out.println("大了,请继续"); } else { System.out.println("小了,请继续"); } count++; } else { System.out.println("随机数是"+random); System.out.println("您一共猜了"+count+"次"); System.out.println("恭喜你猜对了,你的战斗力是:"+(1-(i-1)/8.0)*100); break; } if(i>=8) { System.out.println("超过次数,尚需努力"); System.out.println("正确答案是:"); break; } } }catch(Exception e) { System.out.println("输入错误,请重新输入:"); } } public static void Difficult() { int count=1; try { int random=(int)(Math.random()*100+1); for(int i=1;;i++) { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("请猜数"); int keyBoardNum=Integer.parseInt(br.readLine()); if(keyBoardNum!=random) { if(keyBoardNum>random) { System.out.println("大了,请继续"); } else { System.out.println("小了,请继续"); } count++; } else { System.out.println("随机数是"+random); System.out.println("您一共猜了"+count+"次"); System.out.println("恭喜你猜对了,你的战斗力是:"+(1-(i-1)/6.0)*100); break; } if(i>=6) { System.out.println("超过次数,尚需努力"); System.out.println("正确答案是:"); break; } } }catch(Exception e) { System.out.println("输入错误,请重新输入:"); } } //主窗体 public static int readSelect(BufferedReader br) { int select=0; while(true) { try { System.out.println("请输入您的选择"); String s=br.readLine(); select=Integer.parseInt(s); if(select>=1&&select<=3) break; System.out.println("无效选择"); }catch(Exception e) { System.out.println("请输入数字"); } } return select; } //主函数 public static void main(String[] args) { System.out.println("请输入一个(0-100)之间的一个数"); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); while(true) { System.out.println("1.开始猜数"); System.out.println("2.游戏参数设置"); System.out.println("3.退出"); int select=readSelect(br); switch(select) { case 1:compareNum();break; case 2:GameSet();break; case 3:System.out.println("游戏结束");return; } } } }
请输入一个(0-100)之间的一个数
1.开始猜数
2.游戏参数设置
3.退出
请输入您的选择
2
游戏难度设置:1:容易 2.一般 3.难
3
请猜数
50
大了,请继续
请猜数
75
大了,请继续
请猜数
25
小了,请继续
请猜数
30
小了,请继续
请猜数
35
小了,请继续
请猜数
40
小了,请继续
超过次数,尚需努力
正确答案是:
1.开始猜数
2.游戏参数设置
3.退出
请输入您的选择