0

我昨天刚开始学习编码,并想尝试制作一个程序来帮助找到今天给定数字的所有完美数字。这些都行不通。Eclipse 上没有显示错误消息,所以我猜这些错误是合乎逻辑的(?)这是相关的代码,有人可以告诉我错误在哪里吗?

protected void actionPerformedProcessBtn(ActionEvent arg0) {
    txtS.setText("");
    int limit = Integer.parseInt(txtAmmount.getText()), a = 1, b = 1, c = 0;
    while (a <= limit) {
        while(a > b) {
            if (a % b != 0) {
                b++;
            }
            else {
               c = c + b; 
               b++;
            }
        }
        if (c == a) 
            txtS.append(a + "\n");
        a++;
    }
}

void ActionPerformedDoBtn(ActionEvent arg0) {
    int c = 1, d, e;
    txtS.setText("");
    while (c <= 1000) {
        d = 0;
        e = 0;
        while(d < c) {  
            if(c % d == 0)
                e += d;
            d++;
        }
        if (e == c)
            txtS.append("Perf Num:" + c);
        c++;
    }
}
4

1 回答 1

1

您需要为 a 的每个值重新初始化 b 和 c。

假设您正在处理 a = 9,因此您将 b 增加到 8,检查 9 是否可被 8 整除,然后将 b 增加到 9,从而退出循环 while (a > b)。现在将 a 设置为 10。此时,b 已经等于上一次迭代的 9。因此,您检查 10 是否可以被 9 整除,但事实并非如此。

整数 b = 1, c = 0; 属于while (a <= limit) 循环。

于 2016-06-27T15:44:16.307 回答