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的分支預測的影響
優秀職場人常用的那些辦公輔助工具分享