0

我知道这个问题之前已经被问过很多次了,但是我还没有看到有人使用这种方法。在任何关于这是家庭作业的评论之前,是的,它是,但我不是在寻找一个完整的答案,我只是在寻找一个正确的方向。基本上,我对这段代码的问题是它只输出数字“0”。我想知道我哪里出错了。

public class Perfect {
public static void main(String[] args) {
    final int LIMIT = 1_000;
    int i;
    int x;
    int works = 0;

    for(i = 1; i <= LIMIT; i++) 
        if(works == i - 1) {
            System.out.print(works + " ");
        }
        for(x = 2; x <= i; x++)
            if(i % x == 0) {
                works = works + x;
            }
            else
                works = works;
}

}

4

2 回答 2

3

你做错的一件事是你没有{}为你使用 for 循环。

你缩进它的方式不是它被执行的方式。

它的执行方式如下。

for(i = 1; i <= LIMIT; i++) {
    if(works == i - 1) {
        System.out.print(works + " ");
    }
}

for(x = 2; x <= i; x++) {
   if(i % x == 0) {
      works = works + x; 
   }
   else {
      works = works;
   }
}

最好始终使用{}with 循环和 if 语句来防止此类错误。

于 2015-11-23T23:17:25.100 回答
1

您的代码的问题是循环没有嵌套。

将其更改为以下内容:

for(i = 1; i <= LIMIT; i++){ 
    if(works == i - 1) {
        System.out.print(works + " ");
    }
    for(x = 2; x <= i; x++) {
        if(i % x == 0) {
            works = works + x;
        } else {
            works = works;
        }
    }
}

当使用 for 循环时,{ }只有下一个表达式属于 for 循环。这意味着您的代码中有两个独立的循环。第一个从1to迭代LIMIT并检查条件if(works == i - 1)。这就是它为什么只推出的原因0

第二个循环只是从2to迭代,LIMIT不会检查 if works == i - 1

顺便说一句:works = works你 else 情况下的分配什么都不做,所以你可以删除它。

于 2015-11-23T23:21:11.770 回答