平时自己对c语言很熟,编写代码一直是面向过程,对java或面向对象完全不熟。最近花了一天时间学习了一下java基本语法,然后拿猜数字这个经典游戏练练手。个人感觉其实对于一门陌生语言,万变不离其宗,哪怕面向对象也好,摸清代码的执行流程,弄明白由哪儿进从哪儿出,输入什么输出什么,很快就能摸清代码逻辑,然后依着葫芦画瓢,也能很快上手。
//Guess.java (Bulls and Cows)
import java.util.Random;
import java.util.Scanner;
class Rand{
int numbox[];
int rand[];
Rand(){
numbox=new int[10];
rand=new int[4];
for(int i=0;i<10;i++)
numbox[i]=i;
for(int i=0;i<4;i++){
int index;
Random ra =new Random();
index=ra.nextInt(10-i);
this.rand[i]=numbox[index];
numbox[index]=numbox[9-i];
}
// System.out.println("rand is:"+rand[0]+rand[1]+rand[2]+rand[3]);
}
boolean compare(int[] input){
int a=0;
int b=0;
for(int i=0;i<4;i++){
if(input[i]==rand[i])
a++;
}
for(int i=0;i<4;i++){
for (int j=0;j<4;j++){
if(input[j]==rand[i])
b++;
}
}
b-=a;
System.out.println(a+"A"+b+"B");
if (a==4){
System.out.println("OK!");
return true;
}else
return false;
}
}
class Input{
int array[];
Input(){
array=new int[4];
}
void input(){
int inp;
do{
Scanner scanner = new Scanner(System.in);
inp = scanner.nextInt();
}while(!this.check(inp));
}
boolean check(int inp){
int tmp=0;
if(inp>9999 || inp<1000){
System.out.println("Input number MUST BE 4 digits!");
return false;
}
for (int i=0;i<4;i++){
array[3-i]=inp%10;
inp=inp/10;
}
for (int i=0;i<3;i++){
for (int j=i+1;j<4;j++){
if(array[i]==array[j])
tmp++;
}
}
if(tmp==0)
return true;
else{
System.out.println("Input number MUST BE DIFFERENT in every digit!");
return false;
}
}
}
public class Guess{
public static void main(String args[]){
Rand ra=new Rand();
for (int i=0;i<10;i++){
System.out.println("Please input 4 digits number:");
int[] array=new int[4];
Input inp=new Input();
inp.input();
System.arraycopy(inp.array,0,array,0,4);
if (ra.compare(array))
return;
}
System.out.println("True value:"+ra.rand[0]+ra.rand[1]+ra.rand[2]+ra.rand[3]);
}
}
运行截图: