为了教会女儿学习java花了三天的下班时间编写了一个java猜数字游戏,为了让她感兴趣,同时能理解编程的思路,可惜目标没有达成,现在共享给大家学习。
package test;
import java.util.Random;
import java.util.Scanner;
public class GuestNumber {
private static boolean repeat = false;
private static boolean success = false;
/**
- @param args
*/
public static void main(String[] args) {
System.out.println("猜数字游戏规则:\n 系统将自动生成4个不重复的数字,您有10次机会输入4个从1-9的不重复的数字来猜这4个数字;\n 当您猜中某个数字时,系统显示1个B,猜中2个显示2B,以此类推;\n 当这个数字的位置也正确时,系统显示1个A,两个数字位置正确显示2A,以此类推;\n 当4个数字都猜中时游戏结束!\n 系统已经生成一个4位不重复的数字,现在游戏开始!");
int d = 1;
String[] guest = generateRandomArray(4);
//System.out.println("$$$$$$$$$$$$"+transform(guest));
while (d != 10) {
if (success) {
int f = d -1;
System.out.println("恭喜您,您共使用"+ f +"次猜中了该数字!");
break;
};
System.out.print("第"+d+"次:请输入1-9内的4个不重复的数字:");
Scanner sacn = new Scanner(System.in);
String st = sacn.next();
if (checkLength(st)) {
String[] e = checkRepeat(st);
if (!repeat) {
System.out.println("您猜测的结果是:"+than(e, guest));
};
}
d++;
}
if (d == 10 && !success) {
System.out.println("您猜数字已经超过10次!该数字是:" + transform(guest));
}
}
private static boolean checkLength(String s) {
if (s == null || s.equals("")) {
System.out.print("输入4位数字!\n");
return false;
}
try{
Integer.parseInt(s);
}catch(NumberFormatException e) {
System.out.print("输入4位数字!\n");
return false;
}
if (s.length() < 4) {
System.out.print("输入的数字小于4位数,请重新输入!\n");
}
if (s.length() > 4) {
System.out.print("输入的数字大于4位数,请重新输入!\n");
}
if (s.length() == 4) {
return true;
}
return false;
}
private static String[] checkRepeat(String s) {
repeat = false;
String[] t = new String[4];
for (int i =0; i < s.length(); i++) {
t[i] = String.valueOf(s.charAt(i));
}
int a = 3;
while (a != 0) {
for (int x = 0; x < a; x++) {
if (t[a].equals(t[x])) {
repeat = true;
System.out.print("输入的数字中有重复数字,请重新输入!\n");
}
}
a--;
}
return t;
}
public static String than(String[] input, String[] random) {
int precise = 0;
int include = 0;
StringBuffer result = new StringBuffer();
for (int a = 0; a < input.length; a ++) {
for (int b = 0; b < random.length; b++) {
if (a == b && input[a].equals(random[b])) {
precise ++;
if (precise == 4) {
success = true;
}
}else
if (input[a].equals(random[b])) {
include ++;
}
}
}
result.append(String.valueOf(precise) + "A");
result.append(String.valueOf(include) + "B");
return result.toString();
}
public static String[] generateRandomArray(int size){
String[] s = new String[size];
Integer range = 10;
Random ran = new Random();
int i = 0;
while(s[size -1] == null){
Integer tmp = ran.nextInt(range);
if (tmp != 0) {
int a = i;
boolean b = false;
while (a != 0) {
if (String.valueOf(tmp).equals(s[a-1])) {
b = true;
}
a--;
}
if (!b) {
s[i] = String.valueOf(tmp);
i ++;
}
}
}
return s;
}
private static String transform(String[] s) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length; i ++) {
sb.append(s[i]);
}
return sb.toString();
}
}