【问题标题】:A random number with 3 digit and try to guess every digit one by one一个 3 位的随机数,并尝试逐个猜测每个数字
【发布时间】:2018-09-25 21:10:27
【问题描述】:

我是 Java 新手,目前基本掌握方法、类和构造函数。为了练习,我正在尝试编写一个基本游戏(safecracker)。所以我的逻辑是获取一个 3 位随机数并尝试猜测它。

private static int takeRandomSafeCode(int min, int max) {
    Random random = new Random();
    int result = random.nextInt(max - min) + min;
    return result;  

 private static void playGame() {
    int safeCode = takeRandomSafeCode(100, 999);
    int guess = takeGuess();

这些是我的随机数方法。但是如果玩家猜到一个数字并且第一个数字是正确的但在错误的位置我想说“一位数字是正确的但在错误的位置”或者如果一个数字是正确的“一位数字是正确的并且正确的位置”

我想我需要在这里使用 if-else 语句,但我得到了我的 numbers int 变量。一一核对数字的方法是什么?我需要使用字符串吗?在这一点上,我有点迷失了。我会很感激你的帮助。

【问题讨论】:

  • 是的,你在字符串中解析你的“结果”数字并尝试在其中找到猜测数字。
  • 你也可以使用 mod 运算符 % ,比如这里:stackoverflow.com/questions/3389264/…
  • 给我们一些您尝试检查的代码,我们可以尝试提供帮助
  • 您希望您的用户猜测人类可读的数字。但是计算机使用二进制数。因此,最好的方法可能是将您要猜测的数字转换为 字符串表示形式 并使用它。

标签: java random


【解决方案1】:

您可以使用一些数学来计算数字,例如,如果您的数字是: d=253

d % 10 -> gives you 3
d / 10 % 10 -> gives you 5
d / 100 -> gives you 2

将其更改为字符串也是一种选择,因为您可以使用 charAt 等字符串函数访问不同的字符。

但是,如果您想让它成为 Java 和 OOP 方式以便学习,您可以创建一个对象并将 3 个数字添加为该对象的属性,并输入一些用于检查的逻辑,而不是做一些魔术之类的技巧以上。例如:

class Combination {
  private  int firstPos;
  private  int secondPos;
  private  int thirdPos;

  public  Combination(){
    firstPos=random.nextInt(10);
    secondPos=random.nextInt(10);
    thirdPos=random.nextInt(10);
 }

 public boolean checkCombination(Combination testedCombination){
       .............
 }
 some methods, getter, setters etc
}

【讨论】:

  • checkCombination 真的只是Object.equals,如果你仔细想想的话。
  • 是的,尤其是对于布尔返回类型。我只是想举例说明如何以 OOP 方式进行操作,而不是在一个大方法中使用混合原语和逻辑来做所有事情。如果您只想查看组合是否匹配 equals 会很好,但如果您想检查“错误位置的正确数字”等,您可能需要其他方法
  • 我还需要为用户猜测 Veselin 做三个不同的 int 变量吗?还是没有必要?
  • 您可以使用相同的类供用户猜测。它又是一个“组合”,只是一个不同的组合,但仍然由 3 个整数组成。但是您需要从函数式静态编程转变为并非全是静态的面向对象的编程;)
【解决方案2】:

如果您生成一个包含三个元素的整数数组,这可能更可取 - 并导致代码更简单。从逻辑上讲,安全代码1-2-3 不是123,实际上是1 后跟2 后跟3

private static int takeRandomDigit() {
    Random random = new Random();
    int result = random.nextInt(10);
    return result;
}

private static void playGame() {
    int[] safeCode = {takeRandomDigit(), takeRandomDigit(), takeRandomDigit()};
    int guess = takeGuess();

    for (int safeDigit : safeCode) // for each digit in the safe code
    {
        // if the digit matches the guess, do something
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2018-04-12
  • 2013-03-13
  • 1970-01-01
相关资源
最近更新 更多