【问题标题】:How to assign random numbers to 2 variables, and then assign new random numbers to those 2 variables when needed?如何为 2 个变量分配随机数,然后在需要时为这 2 个变量分配新的随机数?
【发布时间】:2021-06-23 19:41:39
【问题描述】:

我需要编写一个程序(使用继承),该程序使用随机数生成器生成 2 个随机数,将这两个数字作为加法问题呈现,然后当问题被回答时,生成一个使用新随机数的新问题数字。到目前为止,我在 3 个单独的 java 文件中有以下代码:

public int numberGenerator()
   {
       int num = 0;
       Random ranNum = new Random();
       ArrayList<Integer> list = new ArrayList<Integer>();
       
       for (int i = 1; i < 20; i++)
       {
           num = ranNum.nextInt(10);
           list.add(num);
       }
       
       Collections.shuffle(list);
       for (int i = 0; i<20; i++)
       {
           list.get(num);
       }
       
       return num;
   }
int rand1 = numberGenerator();
int rand2 = numberGenerator();
int sum = rand1 + rand2;
String sumCompare = String.valueOf(sum);

我有这个代码来提出这个问题:

while (problem.getSum() < 10)
            {
                problem.setText("What is " + problem.getRand1() + " + " + problem.getRand2()
                + " ?");
                problem.setAnswer(problem.getSumCompare());
                presentQuestion(problem);
            }  

假设它吐出的随机数是 2 和 3。它会问我,“2+3 是什么?”然后我会正确回答它,它会问我另一个问题,但它会再次问我“什么是 2+3?”我需要代码来问我一个不同的加法问题,而不是一遍又一遍地使用相同的数字。如果我遗漏了信息,我提前道歉,如果需要了解更多信息,请告诉我,我已尽力提供!

【问题讨论】:

  • 所以.... 只是按照你的要求去做? “它会问我,“什么是 2+3?”然后我会正确回答它,它会问我另一个问题”,所以在接受的答案上生成新的数字。如果你走到这一步,你就得到了:只需生成新的数字。
  • 你把这弄得太复杂了。不需要您的方法numberGenerator(),当然也不需要ArrayList 和改组,Random 类会根据需要为您提供随机数。说到这一点,您还应该在每次需要新值时创建一个新的Random 对象。在您的程序中创建一个Random 实例,然后继续重复使用它。
  • 我和@pjs 在一起。您的代码比必要的复杂得多。
  • @pjs 不幸的是,数字生成器方法是我的作业要求的一部分,但感谢您指出我的代码过于复杂......我在脑海中过度复杂的编程,所以它看起来像我的代码反映了这一点,道歉......
  • @Gill 项目要求有一个名为numberGenerator() 的方法吗?我问是因为根据您所描述的逻辑,您似乎需要做的就是返回从nextInt() 获得的值,考虑到Random 实例应该是静态并创建的,这似乎不值得包装在一个方法中在你的main

标签: java arraylist random


【解决方案1】:

正如 cmets 中所讨论的,(a)您的问题不清楚,并且(b)显然您对问题的思考过度了。你的列表和洗牌似乎与我无关,除非我误解了你的意图。

做一个while循环,测试是否继续的条件。

在每个循环中,生成一对数字。询问用户的答案。与您自己计算的总和进行比较。 Lather, rinse, repeat.

int min = 7;
int max = 42;
try ( Scanner scanner = new Scanner( System.in ) )
{
    boolean go = true;
    while ( go )
    {
        int x = ThreadLocalRandom.current().nextInt( min , max );
        int y = ThreadLocalRandom.current().nextInt( min , max );
        int z = ( x + y );

        System.out.println( x + " + " + y + " = ? " );
        int input = scanner.nextInt();

        if ( input == z )
        {
            System.out.println( "Yep." );
        } else
        {
            System.out.println( "Nope. Sum = " + z );
        }

        System.out.println( "Do it again? ( true or false ) " );
        go = scanner.nextBoolean();
    }
}

运行时。

30 + 31 = ? 
44
Nope. Sum = 61
Do it again? ( true or false ) 
true
31 + 37 = ? 
68
Yep.
Do it again? ( true or false ) 
true
10 + 7 = ? 
17
Yep.
Do it again? ( true or false ) 
false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多