一个简单的Java编程题不知道为什么错了(求完全数)

public class PerfectNum{
public static void main(String [] args){
int count=1;
for(int i = 1;i < 10000;i++){
int y=0;
for(int j = 1;j < i;j++){ //去除这里的{}为正确的
if(i%j == 0){
y+=j;
}
if(i == y){
System.out.print(i+String.valueOf('\t'));
count++;
if(count%3 == 0){
System.out.println();
}
}
}
}
}
}
我知道去除上面标记的大括号是正确的但是我想知道加了括号会出现下面的结果
就按这个输出的是这样的

注:完全数例如6=1*2*3,6=1+2+3

第1个回答  2012-11-18
需要统计完所有的因子之和,然后比较这个数与所有因子的和是否相等,所以
if(i == y){
System.out.print(i+String.valueOf('\t'));
count++;
if(count%3 == 0){
System.out.println();
}
上面这一部分代码应该放在第二重循环的外面。
就这里错了,其余的很OK,我试了下,一调整就没问题了。
第2个回答  2012-11-06
错误的地方是,
如果你不去掉大括号的话,
{
if(i%j == 0){
y+=j;
}
if(i == y){
System.out.print(i+String.valueOf('\t'));
count++;
if(count%3 == 0){
System.out.println();
}
}
}
上面代码全部都在第二层循环体里面,因为8190是完全数,当判断出来8190是完全数以后,y=8190,i的值也一直是8190,所以,就会一直打印输出。
但是当你把第二层循环的大括号去掉以后,则第二层循环的循环体就仅仅是
if(i%j == 0){
y+=j;
}
即,算出y的值(i 的所以约数的和)。
这样y跟i比较,只会比较一次,输出也是一次。本回答被网友采纳
第3个回答  2012-11-06
你必须要保证y那儿运行完后再判断是否和i相等噻。就比如6=1*2*3,如果加上中括号,那么没次都要判断i是否与y相等,就会输出很多非完美数
相似回答