我正在做这个程序:给定一个整数,n,如果它的除数之和(不包括自身)等于n,那么这个数字就是完美的。如果和低,它被说是决定性的,如果它是高的,它被说是丰富的。例如:
6有除数1,2,3:它们加6,所以6是完美的。8有除数1,2,4:它们加7,因此8是决定性的。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);
}
}发布于 2017-11-18 12:50:44
一个问题是您没有重置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++;
}
}https://stackoverflow.com/questions/47366122
复制相似问题