java版猜数字游戏

平时自己对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]);
        }
}
运行截图:



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值