题目来自于网络,如下:
请写这样一个猜数字游戏的函数
有系统自动生成的四位数和用户手动输入的四位数。要求这两个数字逐位比较。如果两个四位数的每一位数字和位置都相同就是一个A,如果数字相同位置不同,就是一个B。例如系统自动产生一个1024,用户输入一个4031.0都在百位上所以就是一个A,有4和1两个相同数字,但是位置不同就是两个B,比对结果返回的就是1A2B。如果既无A有无B,那么就算是错误一次。错误达到六次提示游戏重来。获取系统数字的函数是getRandomNum().获取用户输入数字的函数是getUserNum()
我苦思冥想勒好长时间 ,想不出一个合理的解决办法
---------------------------------分割线-----------------------------------------------
以下为测试代码,尚未进行优化,只为了实现结果,还望来看的各位多指点,工程是在Eclipse里编写的,记事本编写小弟能力尚浅,见谅;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
/**
* 2013-4-24 kazeik
*/
/**
* @author kazeik
*
*/
public class NumTest {
/**
* 得到系统随机四位数
*/
public static String[] getRandomNum() {
Random rd = new Random();
String[] tempAr = new String[4];
for (int i = 0; i < 4; i++) {
int tempId = (Math.abs(rd.nextInt()) % 10);
tempAr[i] = String.valueOf(tempId);
System.out.println(tempAr[i]);
}
return tempAr;
}
/**
* 得到用户输入的四位数
*
* @throws IOException
*
*/
public static String[] getUserNum() throws IOException {
System.out.println("-----------请输入四位数字-----------");
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader buRead = new BufferedReader(in);
String temp = buRead.readLine();
String[] usArr = null;
if (temp.length() >= 4) {
String otstr = temp.substring(0, 4);
usArr = new String[4];
for (int i = 0; i < otstr.length(); i++) {
usArr[i] = otstr.substring(i, i + 1);
System.out.println(usArr[i]);
}
}
return usArr;
}
public static void main(String[] argv) throws IOException {
int aint = 0;
int bint = 0;
String[] sysin = getRandomNum();
String[] userin = getUserNum();
for (int i = 0; i < sysin.length; i++) {
if (sysin[i].equals(userin[i])) {
aint++;
} else {
for (int j = 0; j < userin.length; j++) {
if (userin[j].equals(sysin[i])) {
bint++;
}
}
}
}
System.out.println(aint + "A" + bint + "B");
}
}