一个简单的Java编程题不知道为什么错了(求完全数)
发布网友
发布时间:2022-07-17 06:13
我来回答
共2个回答
热心网友
时间:2024-12-15 00:51
要求是求完全数,首先完全数是各个小于它的约数(真约数)的和等于它本身的自然数,也就是说判断一个数i是不是完全数,是从1取到j(i-1),判断i%j == 0;像程序中写的那样,如是成立,则y+=j;否则,应该是j++,而不是判断i==y,因为此时i的约数还没有取尽。思路是对的,是内层循环嵌套错了。在编码时注意格式,会看的更加清晰(如下)。
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();
}
}
}
}
}
}
热心网友
时间:2024-12-15 00:51
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) { }
if (i == y) { }
}
}
上面不加{}意思和下面加{}意思相同
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) { }
}//这里加{}
if (i == y) { }
}
}
//上面两个意思相同,与下面的意思不同 这个{ } 里有两个 if(){}
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) { }
if (i == y) { }
}//这里加{}
}
}
于是 把你代码改一下就对了
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();
}
}
}
}
}追问谢谢,你是对的,但是为什么把括号放在最后会是三行显示呢??而且哪两个数8190和8128是怎么来的??
追答=因为 count%3==0 count是3的倍数判断为真 即 换行
因为count是从1开始的 显示第一个数的时候count=2 所以第一行会显示2个数 从第二行开始显示3个
至于8190和8128 怎么来的,因为i=8128 i=8190的时候有很多个 j 满足两个if子句所有会打印很多遍 ,算出来不是很难 :一步一步逆推,
i=8190,i%j==0 j可能的值如下:1 2 3 5 6 7 9 10 13 14 15 18 21 26 30 35 39 42 45 63 65 70 78 90 91 105 117 126 130 182 195 210 234 273 315 390 455 546 585 630 819 910 1170 1365 1638 2730 4095 y是这些值的和 当 j=1170时 y=8190 很明显 这是会打印i即8190 当j=1171时 y=8190 打印i……一直到j=1365时 y=8190+1365 ,所以会有很多8190
如果程序正确就不会有这样的问题了 y最终的值一定大于8190
8128 j:1 3 7 15 31 63 127 254 508 1016 2032 4064 j=4064时(最后一个?数) y=8128
主要理解程序运行的过程就OK