我不知道我的代码有什么问题。它应该打印介于1到100之间的所有理想数字。我尝试使用嵌套的for循环,while循环和for循环。但是,该代码似乎不正确。
class CompProject1
{
public static void main()
{
int num, sum=0;
int i;
for(num=1; num<100; num++)
{
for(int j = 1; j<=num ; j++)
{
if(num%j==0)
{
sum = sum+j;
}
}
if(sum==num)
{
System.out.println(sum);
}
}
}
}
答案 0 :(得分:1)
将代码更改为:
public static void main(String[] s1) throws Exception {
int num, sum = 0;
int i;
for (num = 1; num < 100; num++) {
for (int j = 1; j <= num - 1; j++) { // change made here
if (num % j == 0) {
sum = sum + j;
}
}
if (sum == num) {
System.out.println(sum);
}
sum = 0; // change made here
}
}
要点:
sum
重置为0 for-loop
中,您需要检查是否直到num - 1
而不是num
,因为每个数字都可以被自身整除答案 1 :(得分:1)
1)您肯定需要为每次迭代重置sum变量,因此您应该在每个循环中执行int sum = 0;
。
2)您需要在j <= num/2;
期间进行迭代!
3)考虑使用Java 8,我将在这里为您编写一些示例。
在这里查看我的示例,它是如此美丽:
public class PerfectNumbersDemo {
public static void main(String[] args) {
IntStream.range(1, 100)
.filter(PerfectNumbersDemo::isPerfect)
.forEach(System.out::println);
}
private static boolean isPerfect(int number) {
return number == IntStream.rangeClosed(1, number / 2)
.filter(i -> number % i == 0)
.sum();
}
}
答案 2 :(得分:0)
您需要:
sum = 0
,每次循环迭代< num
,直到<= num
这是固定代码:
public static void main(String[] args) {
int sum;
for(int num = 1; num < 100; num++) {
sum = 0;
for(int j = 1; j< num; j++) {
if(num % j == 0) {
sum += j;
}
}
if(sum == num) {
System.out.println(sum);
}
}
}
输出:
6
28
答案 3 :(得分:0)
这似乎是作业或作业问题。您只能自己解决此问题,而不要向Stack Overflow上的人员提出。
但是,您要寻找的答案是here。谨防!无论输入的数字是否为完美数字,此代码都会打印,但不会打印低于100的所有数字(可能是完美数字)。那是你的功课。
答案 4 :(得分:0)
因此,您的代码有一些小问题,我将尝试找出它们。
1。首先,您的sum变量应位于第一个for循环之内
2.第二个循环将运行的上限为j<num
而不是j<=num
,因为对于完美的数字,该数字本身不应该计入总和。
您的代码将如下所示。
我不知道我的代码有什么问题。它应该打印介于1到100之间的所有理想数字。我尝试使用嵌套的for循环,while循环和for循环。但是,该代码似乎不正确。
class CompProject1 {
public static void main()
{
int num;
for(num=1; num<100; num++)
{
int sum = 0;
for(int j = 1; j<=num ; j++)
{
if(num%j==0)
{
sum = sum+j;
}
}
if(sum==num)
{
System.out.println(sum);
}
}
}
}
答案 5 :(得分:0)
public class factors{
public static void main(String args[]){
int sum=0;
for(int k=2;k<=30;k++){
for(int i=1;i<k;i++)
{
if(k%i==0)
sum=sum+i;
}
if(k==sum)
System.out.println(sum);
sum=0; //sum=0 is very important.
}
}
}
输出
6
28