【问题标题】:Update a variable outside a loop from inside the loop从循环内部更新循环外部的变量
【发布时间】:2022-01-13 20:23:51
【问题描述】:

尝试创建一个方法来返回“n”以下的第一个数字,该数字可以完全除以第一个和第二个除数。目前我的程序返回“答案”的默认值为 0,我希望在循环内计算的值在循环外被转换返回。是的,我是初学者:(

static int highestNumberBelowNDivisibleByTwoNumbers(int firstDivisor, int secondDivisor, int n) {
    int multipliedDivisors = firstDivisor * secondDivisor;
    int answer = 0;
    int remainder = 0;
    for (int i = n; i <= 1; i--) {
        remainder = multipliedDivisors / i;
        if (remainder == 0){
            answer = i;
            break;
        }
    }
    return answer;      
}

【问题讨论】:

  • / 不计算余数。
  • 多人已经写了很好的回复,但也想检查您的代码是否按照您的要求进行。我看到您的问题是询问“N 以下的第一个数字可以被两个数字整除”但是您的代码似乎正在寻找其他东西......您的代码似乎正在寻找 N 以下的第一个可以分为两个除数的倍数 - 我不擅长数学,所以我不知道这是否等于同一件事,但也许尝试更直接地使用你的逻辑,它会简化代码的编写方式。

标签: java for-loop


【解决方案1】:

根据您的描述:

试图创建一个方法来返回“n”下面的第一个数字 可以完全被第一个和第二个除数整除。

使用% operator(余数/模数)尝试以下类似的操作:

static int highestNumberBelowNDivisibleByTwoNumbers(int firstDivisor, int secondDivisor, int n) {
    while (n>0) {
        if ((n % firstDivisor == 0) && (n % secondDivisor == 0)) {
            return n;
        }
        n--;
    }
    return -1; // no answer found      
}

【讨论】:

  • 谢谢老哥的帮助,没想到你也可以实现2个返回函数。多爱
【解决方案2】:

你的代码

for (int i = n; i <= 1; i--) {
    remainder = multipliedDivisors / i;
    if (remainder == 0){
        answer = i;
        break;
    }

将计数器从 n 减少到 1。但是,您的 answer 不会更新,除非余数为零。如果该条件从未满足,则将返回默认值n(为零)。

问题? remainder = multipliedDivisors / i remainder 什么时候为零?
因为这个赋值,int multipliedDivisors = firstDivisor * secondDivisor;,只有当“除数”变量之一为零时。

重做你的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2012-12-02
    • 2012-02-06
    相关资源
    最近更新 更多