关于for循环出现的基本问题

//一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
public class Yinzi {
public static void main(String[] args) {
yinzi();
}

private static void yinzi() {
    int tat = 0;
    for (int i = 1; i <= 1000; i++) {
        for (int j = 1; j <= i / 2; j++) {
            if (i % j == 0) {
                tat = tat + j;
                if (tat == i) {
                    System.out.println(i);
                    tat = 0;
                    continue;
                }
            }
        }
    }
}

}
jr们,问题出在哪里了呢?

for (int j = 1; j <= i / 2; j++) { ---这个不行啊,得循环所有值

你的程序没有实现想要的结果吧,内循环终止条件不对,应该是j<=i

内循环
for (int j = 1; j <= i / 2; j++) {
改为
for (int j = 1; j <= i;j++) {

总结一下:
一是循环结束点是错误的,应该1到i-1,而不是1到i/2,这里不是求素数
二是循环体错误,不能每判断一个j值就判断和是否为i,应该1到i-1都判断完之后再比较tat和i是否相等

private static void yinzi() {
    int tat = 0;
    for (int i = 1; i <= 1000; i++) {
       tat = 0;
        for (int j = 1; j <i; j++) {
            if (i % j == 0) 
                tat = tat + j;
        }
        if (tat == i) 
           System.out.println(i);
    }
}
 

我觉得判断到I/2是对的啊,假如i=10,你判断到5就可以了,难道I/2+1(6)以上还能被10整除(10的因子)??