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.退出
请输入您的选择




你可能感兴趣的:(java,游戏,exception,String,Random,Class)