我在为变量 a 和 b 生成 100-999 范围内的两个数字时遇到问题。当数字b大于a时,随机数生成器应该中断。我需要
a) 检查有多少个不重复的公约数有这个数字
b) 打印变量 a 和 b 中不常见的除数之和
我已经有了生成 var a,b 的代码(具有更大的 b),并且我认为我还有为我提供除数的循环,但似乎没有。< br/>
我应该改变什么来提供正确类型的除数?或者其中任何一个 - 因为它效果不好。
谢谢您的回答。
<小时/>public class Ex3 {
public static void main(String[] args) {
Random rand = new Random();
int a,b;
List<Integer> divider= new ArrayList<Integer>();
while(true)
{
a = rand.nextInt(900) + 100;
b = rand.nextInt(900) + 100;
System.out.println(a + "" + b);
if(b>a) {
for(int i=2;i<a;i++){
if((a % i)==0) divider.add(i);
}
System.out.println(divider.toString());
for(int i=2;i<a;i++){
if((b % i)==0) divider.add(i);
}
break;
}
}
}
}
最佳答案
我相信您想要的是所有公约数,它们可以被划分为每个随机生成的整数值并且不留余数。除数通常从 1 开始,并逐渐(按 1)计算到随机值 a
和随机值 b
。当然,检测到的公约数会被存储起来,并在除数搜索完成后显示。
下面示例代码中的第一个 for 循环执行此除数搜索。当您查看循环时,您可以看到与代码的差异。您对应该更改哪些内容以提供正确类型的除数的假设是正确的。
所以,下面的示例代码:
- 生成 100(含)到 999 之间的两个随机整数值 (含)根据您的规范。
- 确保变量b中的随机整数值更大
比变量
a
中的随机整数值。 while 循环是 仅用于此特定目的且仅用于此目的。这 循环条件确保b
中的值必须大于a
中的值以便退出该循环。 - 随机值将显示到控制台。
- for 循环用于针对
a
中的值和值 在b
中获取公约数。请注意这是如何完成的,付款 特别注意 termination for 循环的(或称为条件)部分 陈述。另请注意 initialization 循环语句部分,你可以看到我们初始化了整数 变量i
为 1,而不是 2。存储任何确定的公约数 在名为commonDivisors
的列表接口(interface)对象中。名为uncommonSum
的整数变量还通过循环代码块中的 else 语句保存所有不常见除数的总和。 - 公约数显示在控制台窗口中。你会 请注意,1 始终是公约数。这才有意义 因为任何数字除以一都将等于该数字,而没有 余数。
- 最后,使用for/each循环对公约数求和
包含在
commonDivisors
列表中,结果被放置 在名为commonDivisorsSum
的整数变量中,然后 显示到控制台窗口。
控制台窗口的示例输出可能如下所示:
Random Numbers: --> A: 848 | B: 976
Common Divisors: --> [1, 2, 4, 8, 16]
Common Div Sum: --> 31
UnCommon Div Sum: --> 359945
Here is the example code:
int a = new Random().nextInt(999 - 100 + 1) + 100;
int b = 0;
// Loop until the random number in b is greater than in a.
while (a >= b) {
b = new Random().nextInt(999 - 100 + 1) + 100;
}
//Display random generated integer values for A and B.
System.out.println("Random Numbers: --> A: " + a + " | B: " + b);
// Get Common Divisors between the two random integer values...
List<Integer> commonDivisors = new ArrayList<>();
int uncommonSum = 0;
for(int i = 1; i <= a && i <= b; i++) {
if(a % i == 0 && b % i == 0) {
commonDivisors.add(i);
}
else {
uncommonSum += i;
}
}
System.out.println("Common Divisors: --> " + commonDivisors);
// Get an display the sum of Common Divisors
int commonDivisorsSum = 0;
for (int i : commonDivisors) {
commonDivisorsSum = commonDivisorsSum + i;
}
System.out.println("Common Div Sum: --> " + commonDivisorsSum);
System.out.println("UnCommon Div Sum: --> " + uncommonSum);
关于java - 不重复的除数/除数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60365541/