首页 > 解决方案 > 如何在java中使两个随机生成的整数彼此可整除?

问题描述

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

到目前为止,我能够生成两个兰特。OnCreate 方法中的 nums 使用 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);

我正在尝试编写两个函数。

第一个功能是根据 rand 生成问题字符串。整数。IE

    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);
}

下一个功能是查找除法问题的结果。IE

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 =?”我不想以这类问题告终:)

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

标签: javaandroid-studiorandomdivision

解决方案


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

因此,您可以生成从 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;
 }

推荐阅读