街头篮球吧 关注:781,094贴子:35,695,861
  • 4回复贴,共1

java程序猿带你走进天游的算法世界(猜数字)

取消只看楼主收藏回复

本人java程序猿一枚,最近天游出了一个猜数字游戏,闲来无趣,写了一个java版本猜数字小游戏


IP属地:陕西1楼2016-09-30 16:09回复
    public class GuessedNumber {
    private int[] guessNumber=new int[4];
    public int[] getGuessNumber() {
    return guessNumber.clone();
    }
    //构造方法,构造时就生成了一个随机的四个数并存入数组
    public GuessedNumber(){
    for(int i=0;i<4;i++){
    boolean boo=true;
    int j=(int)(Math.random()*10);
    for(int n=0;n<i;n++){
    if(j==guessNumber[n]){
    boo=false;
    break;
    }
    }
    if(boo){
    guessNumber[i]=j;
    }else{
    i--;
    }
    }
    }
    }


    IP属地:陕西2楼2016-09-30 16:09
    回复
      import java.util.Scanner;
      import java.util.regex.Pattern;
      public class Game {
      private int[] guessedNum;
      private int[] scanNumber=new int[4];
      private Scanner scan=new Scanner(System.in);
      //游戏流程,外部只能通过此方法来进行游戏
      public void gameRun(){
      welcome();
      while(true){
      this.guessedNum=new GuessedNumber().getGuessNumber();
      System.out.println(guessedNum[0]+""+guessedNum[1]+""+guessedNum[2]+""+guessedNum[3]);
      for(int i=0;i<7;i++){
      scanManager();
      String result = compareNumber();
      if(result.equals("4A0B")){
      System.out.println("恭喜你猜出正确数字!");
      break;
      }else{
      if(i==6){
      System.out.println("很遗憾,没有猜出来");
      System.out.print("正确答案为:");
      for(int n=0;n<4;n++){
      System.out.print(guessedNum[n]);
      }
      System.out.print("\n");
      break;
      }
      System.out.println(result+"\t还有"+(6-i)+"次机会");
      }
      }
      if(quitYesOrNo()){
      continue;
      }else{
      break;
      }
      }
      scan.close();
      quitGame();
      }
      private void welcome(){
      System.out.println("**********欢迎游玩猜数游戏**********");
      }
      //控制用户输入数字
      private void scanManager(){
      int number=0;
      while(true){
      System.out.print("输入一位四位数:");
      String numStr=scan.next();
      if(judgeScan(numStr)){
      number=Integer.parseInt(numStr);
      break;
      }else{
      System.out.println("输入错误,重新输入!");
      }
      }
      this.scanNumber[0]=number/1000;
      this.scanNumber[1]=number/100%10;
      this.scanNumber[2]=number/10%10;
      this.scanNumber[3]=number%10;
      }
      //判定所输入的内容,通过正则表达式固定为4位数
      private boolean judgeScan(String numStr){
      String regex="^\\d{4}$";
      boolean boo=Pattern.compile(regex).matcher(numStr).find();
      return boo;
      }
      //比较数字,返回此次比较结果,以xAxB的结果返回
      private String compareNumber(){
      int A=0,B=0;
      for(int i=0;i<4;i++){
      for(int j=0;j<4;j++){
      if(this.scanNumber[i]==this.guessedNum[j]){
      if(i==j){
      A+=1;
      }else{
      B+=1;
      }
      }
      }
      }
      return A+"A"+B+"B";
      }
      //控制继续游戏规则
      private boolean quitYesOrNo(){
      while(true){
      System.out.println("继续游戏吗?(Y/N)");
      String str=scan.next();
      if(str.equals("Y")||str.equals("y")){
      return true;
      }else if(str.equals("N")||str.equals("n")){
      return false;
      }else{
      System.out.println("输入错误,重新输入!");
      }
      }
      }
      //退出
      private void quitGame(){
      System.out.println("谢谢游玩");
      System.exit(0);
      }
      }


      IP属地:陕西6楼2016-09-30 16:11
      回复
        public class TestMain {
        public static void main(String[] args) {
        Game game=new Game();
        game.gameRun();
        }
        }
        测试类,走起~


        IP属地:陕西11楼2016-09-30 16:13
        回复
          本帖只是一种算法实现,有好的实现可以一起讨论


          IP属地:陕西12楼2016-09-30 16:15
          回复