Dan*_*mes 1 java infinite-loop perfect-numbers
你好,这是我第一次在这里问一个问题,我读了指南,我确实找了一个答案而没找到,所以我希望我的问题符合指导方针.无论如何,我坚持一个简单的Java练习,我必须输出前N个完美数字(在数论中,一个完美的数字是一个正整数,等于其正确的正数除数的总和,即它的总和正数除数除了数字本身(也称为等分和).)所以我这样做了
import java.util.Scanner;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int cont = 0;
int num = 1;
int soma = 0;
System.out.println("Quantos números perfeitos?");
int n = in.nextInt();
while (cont < n) {
for (int i = 1; i <= num / 2; i++) {
if (num % i == 0) {
soma = soma + i;
}
}
if (num == soma) {
System.out.println(num + " é perfeito.");
cont++;
}
num++;
}
}
Run Code Online (Sandbox Code Playgroud)
它陷入无限循环,我无法弄清楚为什么.无论如何,如果有人可以帮助我,我会非常感激,如果我的问题得到了回答,或者这只是一个愚蠢的问题,对不起,正如我所说,这是我第一次问.谢谢.
你的代码看起来很好 - 你唯一忘记做的就是重置somawhile循环中每次的值.在您当前的代码中,soma是您到目前为止所有数字的正确因素的总和,这不是您想要的.
这是您需要的代码:
Scanner in = new Scanner(System.in);
int cont = 0;
int num = 1;
int soma;
System.out.println("Quantos números perfeitos?");
int n = in.nextInt();
while (cont < n) {
soma = 0; //Don't forget this line
for (int i = 1; i <= num / 2; i++) {
if (num % i == 0) {
soma = soma + i;
}
}
if (num == soma) {
System.out.println(num + " é perfeito.");
cont++;
}
num++;
}
Run Code Online (Sandbox Code Playgroud)