我正在做这个程序:给定一个整数n,如果它的除数之和(不计算自身)等于n,那么这个数字就是完美的。如果总和较低,则说它是分数,如果它更高,则说它是丰富的。例如:
6有除数1,2,3:它们加6,因此6是完美的。 8有除数1,2,4:它们加7,因此8是deciente。 24有除数1,2,3,4,6,8,12:它们加36,因此24是丰富的。
编写一个读取两个正整数的程序,并在屏幕上显示该区间内每种类型的数量(包括极值)。
我有以下代码,我知道它失败的地方,例如,如果我输入一个数字,我做得很好,条目6和7的例子。如果我然后输入6和9输出是完美1缺点0丰富的2,当我应该是完美的1缺乏2丰富的0.变量j存储变量j中所有的除数然后那是为什么它丰富但我无法纠正它比我尝试过的更多。
import java.util.Scanner;
public class PerfectNumbers {
public static void main(String[] args) {
System.out.println("Enter two numbers for the interval:");
Scanner teclado = new Scanner(System.in);
int x = teclado.nextInt();
int y = teclado.nextInt();
int cont1 = 0;
int perfect = 0;
int deficient = 0;
int abundant = 0;
for (int i = x; i < y; i++) {
for (int j = 1; j < i; j++) {
if (i % j == 0) {
cont1 += j;
} else {
cont1 += 0;
}
}
if (cont1 == x) {
perfect += 1;
} else if (cont1 < x) {
deficient += 1;
} else if (cont1 > x) {
abundant += 1;
}
}
System.out.println("Perfect"+ perfect);
System.out.println("Deficient"+ deficient);
System.out.println("Abundant"+ abundant);
}
}
答案 0 :(得分:0)
一个问题是您没有重置cont1
。
另一个问题是,您需要与x
进行比较,而不是与i
进行比较以确定完美/不足/丰富,
for (int i = x; i < y; i++) {
cont1 = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) {
cont1 += j;
}
}
if (cont1 == i) {
perfect += 1;
} else if (cont1 < i) {
deficient += 1;
} else {
abundant += 1;
}
}
我认为第二个问题很容易被忽视,因为变量的命名很差。我建议改进这一点,并且更容易阅读并且更难以犯这样的错误:
for (int n = start; n < end; n++) {
sum = 0;
for (int j = 1; j < n; j++) {
if (n % j == 0) {
sum += j;
}
}
if (sum == n) {
perfect++;
} else if (sum < n) {
deficient++;
} else {
abundant++;
}
}