Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 完全数格式_Java_Formatting_Perfect Numbers - Fatal编程技术网

Java 完全数格式

Java 完全数格式,java,formatting,perfect-numbers,Java,Formatting,Perfect Numbers,我有一篇关于1-1000之间的完美数的家庭作业,其中一个数等于它的除数之和。我找到了正确的代码来检查一个数字是否是一个完美的数字,并发现这些数字是1,6,28,496(我不知道为什么会包括1,但我老师的例子中也包括了1)。我的问题很简单。我希望的结果是: 1=1 6=1+2+3 28=1+2+4+7+14 496=1+2+4+8+16+31+62+124+248 但我得到的是: 1=1 6=1+2+3+ 28=1+2+4+7+14+ 496=1+2+4+8+16+31+62+124+248+ 最

我有一篇关于1-1000之间的完美数的家庭作业,其中一个数等于它的除数之和。我找到了正确的代码来检查一个数字是否是一个完美的数字,并发现这些数字是1,6,28,496(我不知道为什么会包括1,但我老师的例子中也包括了1)。我的问题很简单。我希望的结果是:
1=1
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
但我得到的是:
1=1
6=1+2+3+
28=1+2+4+7+14+
496=1+2+4+8+16+31+62+124+248+
最后如何排除额外的+ 我的代码是这样的:

private static boolean perfect(int n){
    boolean cek=false;
    int x=0;
    if(n==1)x=1;
    for(int i=1;i<n;i++){
        if(n%i==0)
            x+=i;
    }
    if(x==n)cek=true;
    return cek;
}
public static void main(String[] args) {
    for(int i=1;i<1000;i++){
        if(perfect(i)){
            if(i==1)
                System.out.println(i+"\t = "+i);
            else{
                System.out.print(i+"\t = ");
                for(int j=1;j<i;j++){
                    if(i%j==0)
                        System.out.print(j+"+");
                }
            System.out.println("");
            }
        }
    }
}    
private静态布尔完美(int n){
布尔值cek=false;
int x=0;
如果(n==1)x=1;

对于(int i=1;i,因为这是作业,所以我将给出一个提示,简单地说,如果不是循环的第一次迭代,只打印
+
。这很容易测试,我会让你弄清楚

编辑,附带一个额外提示:您可能需要尝试打印
+

的确切位置。请尝试以下操作

boolean first = true;
for(int j=1;j<i;j++){
     if(i%j==0)
        if(!first)
           System.out.print("+"+j);
        else{
           first = false;
           System.out.print(j);
        }
 }
boolean first=true;

对于(intj=1;jDo)你真的需要每次都检查(i==1)
吗?哈哈哈,不,我想这有点低效。我本来可以一开始就把它打印出来。是的,我会把它修好的。另一个答案把它弄坏了(嗯,不完全是这样)对我来说。如果j==1,我只打印j,否则我只打印+j。谢谢你的提示。没问题,很高兴它成功了。我是一名前教师,所以如果可能的话,我喜欢给出提示,但大多数时候人们都会为你写代码。对于未来,如果你在帖子中明确要求提示,我想大多数人都会尊重这一点。