【问题标题】:Characters in Correct Position Without Array Java没有数组Java的正确位置的字符
【发布时间】:2014-12-11 04:26:48
【问题描述】:

我正在为 Mastermind 类型的游戏编写 Java 代码,其中计算机生成一个随机的 4 位数字供玩家解决,而不是颜色。如果猜测不正确,则应该指出猜测的哪些数字在生成的随机数的正确位置。这是我的代码:

import java.util.Scanner;
import java.util.Random;
import java.lang.String;

public class CSCD210HW2
{
   public static final int MAX = 10;
   public static void main(String [] args)
   {
      int nums, guess, countMe;
      String userChoice;
      boolean tryAgain = false;
      boolean reDo = false;
      Scanner kb = new Scanner(System.in);
      Random rand = new Random();
      String ans = null;
      do
      {
         reDo = false;
         nums = rand.nextInt(9999 - 1000) + 1000;
         countMe=0;
         do
         {
         System.out.print("Enter Four Digit Guess: ");
         guess = kb.nextInt();
         countMe++;
         while(guess < 1000 || guess > 9999)
         {
            System.out.print("I SAID 4 DIGITS! Try Again: ");
            guess = kb.nextInt();

         }
         if(nums < guess)
         {
            System.out.println("Your Guess Was Too High.");
            System.out.println("Guesses Left: "+(MAX-countMe));

         }

         else if(nums > guess)
         {
            System.out.println("Your Guess Was Too Low.");
            System.out.println("Guesses Left: "+(MAX-countMe));


         }
         if(nums == guess)
         {
            System.out.print("Congratulations! Computer Bust!");

         }

      }while(guess != nums && countMe < MAX);
      System.out.println(" Game Over! The Number Was: "+nums);
      System.out.print("Try Again? ");
      userChoice = kb.next();
      while(!userChoice.equalsIgnoreCase("yes") && !userChoice.equalsIgnoreCase("no"))
      {
         System.out.print("It's Quite Simple. YES or NO: ");
         userChoice = kb.next();
      }
      if(userChoice.equalsIgnoreCase("YES"))
      {
         reDo = true;
      }
      }while(reDo);
   }//end main
}//end TheClass

我唯一的问题是正确位置部分的数字。我知道它可以使用数组来完成,但我还不太习惯使用它们,所以我宁愿不这样做。我还能怎么做呢?

【问题讨论】:

  • 您将更轻松地为此使用数组,并且您将受益于更多地了解一个极其重要的数据结构。如果您对避免数组一无所知,您可以将数字转换为 4 个字符的字符串,然后根据位置检查字符串中的元素。但无论如何,这种方法在概念上类似于处理数组!

标签: java string random


【解决方案1】:

这样粗略而简单的检查就可以了:

if ((nums / 1000) == (guess / 1000)) System.out.print("Num 1 matches");
if (((nums % 1000) / 100) == ((guess % 1000) / 100)) System.out.print("Num 2 matches");
if (((nums % 100) / 10) == ((guess % 100) / 10)) System.out.print("Num 3 matches");
if ((nums % 10) == (guess % 10)) System.out.print("Num 4 matches");

显然这是丑陋的,可以做得更好,但它说明了这一点。整数除法修剪余数,所以1234 / 1000 给你1。取模 (%) 为您提供余数(因此 1234 % 1000 结果为 234)。结合这两者,可以得到numsguess中每个位置的单个整数,并进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 2021-02-27
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多