Pefect Number Java

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)

它陷入无限循环,我无法弄清楚为什么.无论如何,如果有人可以帮助我,我会非常感激,如果我的问题得到了回答,或者这只是一个愚蠢的问题,对不起,正如我所说,这是我第一次问.谢谢.

416*_*577 6

你的代码看起来很好 - 你唯一忘记做的就是重置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)

  • 我想知道为什么这会被投票.这是正确的答案. (2认同)
  • 是的,我测试了它,它似乎工作.n = 3的输出:`6éperfeito.28éperfeito.496éperfeito (2认同)