java - 完美的数字

标签 java list arraylist numbers perfect-numbers

我尝试在 java 中使用此程序来输入最多 1000 个整数的有界常量。没有得到预期的输出:(

package perfect.numbers;
import java.util.ArrayList;
public class PerfectNumbers {

    public static void main(String[] args) {
        long num=1000; int sum = 0;
        ArrayList<Integer> perfectList = new ArrayList<>();
        ArrayList<Integer> factorList = new ArrayList<>();
        for(int i=1; i<num; i++)
        {
           for(int j=1; j<i/2; j++)
           {         
                if(i%j==0)
                {
                    factorList.add(j);
                }

                for(int h=0; h<factorList.size(); h++)
                    sum=sum+factorList.get(h);

                if(sum==i)
                perfectList.add(i);
                sum=0;
            }
        }

        System.out.println("The Perfect numbers upto 1000 are : ");

        for(Integer item : perfectList)
        {
            System.out.print(item + "/t");
        }
    }
}

最佳答案

您的代码有多个问题:

  1. 因子列表未清除
  2. 例如 6 是一个完全数 = 1+2+3,但 inter for 循环在 2 处停止。(j<3)
  3. 此外,我还有第三个内部 for 循环,因为我已移出第二个内部 for 循环。

这是正确的版本:

import java.util.ArrayList;

public class PerfectNumbers {

    public static void main(String[] args) {
        long num = 1000;
        int sum = 0;
        ArrayList<Integer> perfectList = new ArrayList<>();
        ArrayList<Integer> factorList = new ArrayList<>();
        for (int i = 6; i < num; i++) {
            factorList.clear();
            for (int j = 1; j <= i / 2; j++) {
                if (i % j == 0) {
                    factorList.add(j);
                }
            }
            sum = 0;
            for (int h = 0; h < factorList.size(); h++) {
                sum = sum + factorList.get(h);
            }
            if (sum == i) {
                perfectList.add(i);
            }

        }
        System.out.println("The Perfect numbers upto 1000 are : ");
        for (Integer item : perfectList) {
            System.out.print(item + "/t");
        }
    }
}

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

相关文章:

java - 我无法在 java ServerSocket 中分配多个地址

java - 如何通过设置分页器循环遍历Java arraylist条目?

java - 为什么 XPath namespace-uri() 不能与 Java 开箱即用?

java - 无法解析Toast方法(Android Studio)

java - 禁用 Java 列表中的可变性

list - 如何将列表转换为带有标题和相应值的 CSV 文本文件?

JAVA: Resizing Array lists ,创建的旧数组和临时数组会怎样?

java - 为什么我会遇到索引越界异常?

javascript - 如何在javascript中调用java方法

python - 尝试扩展行数据并转换为 DataFrame,出现此错误 : AttributeError: 'float' object has no attribute 'keys'