为了教会女儿学习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();

}

}