【问题标题】:Random Number Issue Java随机数问题 Java
【发布时间】:2014-02-11 21:02:11
【问题描述】:

所以我一直在到处寻找一种方法来做到这一点,但我找不到能满足我教授想要的方法。

他希望我们使用随机种子创建一个随机数,然后对其进行测试以查看它是否是一组数字中的任意数字,然后更改直到它不是该组数字中的任意一个数字.

关键是我们不允许使用除 if 语句之外的任何形式的循环,也不允许在执行此操作的过程中使用递归。

请帮忙。

【问题讨论】:

  • 我不认为他想让你找到一个方法,而是写一个。 [提示提示]
  • 向我们展示您的尝试,不要只是寻求解决方案。
  • Lmao 这就是我的意思,我已经在这里坐了差不多 4 个小时了,我的每一个想法似乎都涉及递归或循环。
  • 这组数字有多大?你在处理什么数字范围?它们是整数吗?
  • 能否提供问题的准确措辞?我怀疑某处有误会。是否提供了总的数字集和不允许的数字集?

标签: java loops random numbers


【解决方案1】:

也许这个练习迫使你采用程序员的思维过程。问题是根据不允许的数字来指定的。但是,测试和重新滚动会迫使您使用循环。

您需要转变思维方式并考虑使用一组允许的数字。您需要做的就是在“允许”集合中生成一个随机索引,然后选择该位置的值。

【讨论】:

  • 你刚刚给了我一个想法。我一直纠结于什么是不允许的,我忘了考虑到底什么是允许的。
  • 练习的目的,正如我所说,可能是让你像程序员而不是羊一样思考。
  • 好的,现在我有了一个新的想法。谢谢。
  • 这仅适用于对实际分配的某些假设,例如预先知道禁止数字的集合。问题中没有具体说明:如果您只有“一组数字”是被禁止的,那么如果没有某个地方的循环/递归,这将无法工作。
  • @MarkoTopolnik 我试图在 cmets 中得到澄清,但发现这是徒劳的。
【解决方案2】:

此解决方案不使用单个循环,而是为您提供所需的结果。抱歉之前的错误解决方案。试试看:

import java.util.Random;

public class rndNumberGenerator {

    public static int[] myNumbers = new int[] {1, 2, 3, 4, 6, 7, 9};

    public static void main(String[] args) {

        checkNumber1();    

    }

    public static void checkNumber1() {

        Random rnd = new Random();

        int x = rnd.nextInt(10);

        int y = goThroughAnArray1(0, x);

        if (y != -1) {
            System.out.println("Generated number is " + x + " and it's already part of the array."
                   + "\nGenerating new random number..");
           checkNumber2();
        }

        System.out.println("Generated number is " + x + " and it's not the part of the array.");
        System.exit(0);

    }

    public static void checkNumber2() {

        Random rnd = new Random();

        int x = rnd.nextInt(10);

        int y = goThroughAnArray1(0, x);

        if (y != -1) {
            System.out.println("Generated number is " + x + " and it's already part of the array."
                   + "\nGenerating new random number..");
           checkNumber1();
        }

        System.out.println("Generated number is " + x + " and it's not the part of the array.");
        System.exit(0);

    }

    public static int goThroughAnArray1(int i, int number) {

        if (i == myNumbers.length)
            return -1;

        if (myNumbers[i] == number)
            return number;

        i++;
        int x = goThroughAnArray2(i, number);

        return x;
    }

    public static int goThroughAnArray2(int i, int number) {

        if (i == myNumbers.length)
            return -1;

        if (myNumbers[i] == number)
            return number;

        i++;
        int x = goThroughAnArray1(i, number);

        return x;
    }

}

【讨论】:

  • 好的,这确实有效,目前正在尝试弄清楚并在我的脑海中分解它,谢谢!
  • 没问题,不过你介意向我解释一下 goThroughAnArray 中的 i++ 是如何工作的。
  • 这太荒谬了。不仅代码过于复杂和令人困惑,而且问题表明不能有循环或递归。此答案使用递归,但您使用了两个函数而不是一个函数这一事实表明您不了解递归是什么。
  • 哈哈!我不在乎代表。我想再次指出你的回答并没有回答这个问题。这是一个递归解决方案,甚至不是一个好的解决方案。
  • 这是不正确的。该问题明确指出“不使用递归”。通过分成两部分来隐藏递归并不会减少递归。 OP 错误地接受了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
相关资源
最近更新 更多