JAVA猜數遊戲程序小研究
最簡單且有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.退出
請輸入您的選擇
最後更新:2017-04-02 06:52:18
上一篇:
高性能計算與高性能計算機講座筆記
下一篇:
操作數組的常用方式二-----排序、查找
BookKeeper設計介紹及其在Hadoop2.0 Namenode HA方案中的使用分析
SSM springmvc java 進銷存 商戶 庫存 多用戶管理係統 項目源碼
silverlight 4 tools for visual studio 2010無法安裝
zoj 2770 Burn the Linked Camp 差分約束
互聯網企業安全高級指南1.3 互聯網企業和傳統企業在安全建設中的區別
兩個簡單的擴展方法:TrimPrefix和TrimSuffix
阿裏又開掛了!全球首台全浸沒液冷服務器“麒麟”橫空出世!
創新源於模仿之二:美化ListView的嚐試
測試多線程對多核cpu的分支預測的影響
優秀職場人常用的那些辦公輔助工具分享