要求:

计算机随机生成一个2位数(00~99),让玩家去猜这个数字,只要玩
家猜的数字不正确,程序继续,直至用户猜对。
为了让程序更有趣,只要玩家猜的数字不正确,计算机就给出提示,告诉玩家他猜出的数字有多少位包含在准确答案中。
数位的顺序不影响匹配的个数,例如,如果正确答案是24,而玩家猜测的是25,计算机会提示有一个数位匹配。如果玩家继续猜的是42,计算机会提示有2个数位匹配;如果,玩家给出的数字的2个数位相同,比如22,那么计算机的提示仍然是1个数位匹配。
程序能处理用户的无效输入:
·非数字
·数字在00~99范围之外
 

import java.util.*;

public class number_guess_2 {
	
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		Random rand = new Random();
		int number = rand.nextInt(100);  // 生成0-99之间的随机数
		
		System.out.print("这是一个猜数字游戏,请输入一个0-99的两位数字");
		int guess = getGuess(in); // 用getGuess()获取值来实现无效输入的过滤
		int numGuesses = 1;
		
		while (guess != number) {
			int numMatches = matches(number,guess);
			System.out.println("猜错啦,您的答案中有"+numMatches+"个数字与正确答案相符");
			System.out.print("请重新输入一个0-99的两位数字");
			guess = in.nextInt();
			numGuesses++;
		}
		System.out.println("回答正确,共回答"+numGuesses+"次");
	}
	
	// 处理用户的无效输入
	public static int matches(int number,int guess) {
		int numMatches = 0;
		if(guess/10 == number/10 || guess/10 == number%10) {
			numMatches++;
		}
		if(guess/10 != number%10 && guess%10 == number%10 || guess%10 == number/10) {
			numMatches++;
		}
		return numMatches;
	}
	
	public static int getGuess(Scanner in) {
		int guess = getInt(in,"请输入一个0-99的两位数字");
		while(guess <= 0 || guess >= 100) {
			System.out.println("您输入的数字不在范围内,请重新输入。");
			guess = getInt(in,"请输入一个0-99的两位数字");
		}
		return guess;		
	}
	
	public static int getInt(Scanner in,String prompt) {
		System.out.print(prompt);
		while(!in.hasNextInt()) {
			in.next();
			System.out.println("您输入的不是数字,请重新输入。");
			System.out.print(prompt);
		}
		return in.nextInt();
	}

}

测试结果如图: 

 

更多推荐

java(生成随机数)用户猜数字