java - 如何在java中使两个随机生成的整数相互整除?

问题描述

我是一个新手,并试图在我的 android studio 项目中编写一个 java 代码生成两个最大为 100(包括)的随机整数,我实际要做的是检查第一个随机整数是否大于第二个随机整数,我也想检查第一个rand.num。可以被第二个 rand.num 整除。

到目前为止,我能够生成两个兰特。 nums 在 OnCreate 方法中使用 Math.random():

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Objects.requireNonNull(getSupportActionBar()).hide();
    setContentView(R.layout.activity_division);

    randomFirstNum = (int) (Math.random() * 100 + 1);
    randomSecondNum = (int) (Math.random() * 100 + 1);

我正在尝试编写两个函数

一个函数是根据兰特生成问题字符串。整数。即

    private void generateQuestion(int randomFirstNum,int randomSecondNum) {
        String firstNum = String.valueOf(randomFirstNum);
        String secondNum = String.valueOf(randomSecondNum);
        String question = null;
    
        if(randomFirstNum % randomSecondNum == 0 && randomFirstNum > randomSecondNum){
            question = firstNum + " ÷ " + secondNum + " = ?";
        } else if(randomSecondNum % randomFirstNum == 0 && randomSecondNum > randomFirstNum){
            question = secondNum + " ÷ " + firstNum + " = ?";
        }
    
        textViewQuestion.setText(question);
}

而下一个函数是求除法题的结果。即

private int findResult(int randomFirstNum,int randomSecondNum) {
    if (randomFirstNum > randomSecondNum && randomFirstNum % randomSecondNum == 0){
        return randomFirstNum / randomSecondNum;
    } else if {(randomSecondNum > randomFirstNum && randomSecondNum % randomFirstNum == 0)
        return randomSecondNum / randomFirstNum;
    }
}

我知道代码不正确并且缺少部分,我只是被困在这里。但我希望我能稍微解释一下我的问题。我希望能够生成一个问题,其中第一个 rand.integer 将大于第二个 rand.integer 或等于第二个 rand.integer(即“20 ÷ 2 = ?”或“21 ÷ 7”) = ?" 或 11 ÷ 11 = ? - 两个 rand. 整数可能是相同的数字 :)

如果两个整数都是赔率(即“17 ÷ 11 = ?”),我只是不知道该怎么做,我不想以此类问题结束:)

如果有人能对我的问题有所了解并希望为我提供明确的答案,我将不胜感激! :) 非常感谢您留下来并花时间阅读我的问题。

解决方法

第一个数字可以在没有任何限制的情况下生成,但为了满足第一个数字必须能被第二个数字整除且第一个数字>=第二个数字要求,您有一个限制,即第二个数字必须是第一个数字的除数,因为它将满足两个要求。

所以你可以生成从 1 到 100 的第一个数字,不管这个数字是什么,找出它的除数并从除数列表中随机选择一个除数。

private static void generateQuestion() {
       int first = (int) (Math.random() * 100 + 1);
       List<Integer> firstNumDivisors = getDivisors(first);
       
       int divisorsRandIndex = (int) (Math.random() * firstNumDivisors.size());
       int second = firstNumDivisors.get(divisorsRandIndex);

    System.out.println(first + " " + second);
    // Create your question from first and second numbers here
}

private static List<Integer> getDivisors(int number) {
    List<Integer> divisors = new ArrayList<>();

    for (int i=1;i<=number;i++) 
        if (number%i==0) 
            divisors.add(i);
            
    return divisors;
 }