您好,这是我第一次在这里提出问题,我阅读了指南,确实找到了答案,但没有找到答案,所以希望我的问题在指南内。无论如何,我都停留在一个简单的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++;

    }
}


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

最佳答案

您的代码看起来不错-您唯一要做的就是每次在while循环中都重置soma的值。在您当前的代码中,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++;
}

关于java - 完美数字Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40730279/

10-11 22:48
查看更多