初学Java程序(计算缺陷,丰富,素数和完美数字)

时间:2016-03-30 19:48:42

标签: java loops infinite

do
    {
        System.out.println("Enter either limit, abundant, deficient, perfect, or prime = value:");
        condition = scan.next();
        String equals = scan.next();
        num = scan.next();
        value=Integer.parseInt(num);
        if (Type.isInteger(condition) || !Type.isInteger(num) || value<0)
            System.out.println("Please enter in condition = value format");
        else
            break;
    }while(stop);

    System.out.println("N" + "\t" + "Abundant" + " " + "Deficient" + " " + "Perfect" + " " + "Prime");
    sigma = 0; //sets sigma=0
    n=1;

    while (stop)
    {    

        for (f = 1; f <= n/2; f++)
        {
            if (n % f == 0)
                sigma = sigma + f;
        }

        System.out.print(n + "\t");

        if (sigma>n)
            acount++;
        if (sigma == 1) 
            p++; //prime counter
        if (sigma<n)
            dcount++; //deficient counter
        if (sigma == n)
            pcount++; //perfect counter 

        System.out.print(acount + " " + "\t" + " " + dcount + "\t" + "   " + pcount + "\t" + "   " + p); //prints abundant column
        System.out.println();

        if (condition.equals("limit"))
        {   
            if(n<value)
                n++;
            else
                break;
        }

        if(condition.equals("abundant")) 
        {
            if(acount<value)
                n++;
            else
                break;
        }

        if (condition.equals("deficient"))
        {    
            if (dcount<value)    
                n++;
            else
                break;
        }

        if (condition.equals("perfect"))
        {
            if (pcount<=value)
                n++;
            else
                break;
        }

        if (condition.equals("prime"))
        {    
            if (p<value)
                n++;
            else
                break;
        }
    }
}
}

基本上,代码应该打印出5列:n,丰富,缺陷,完美和素数。每行下面都会有一列数字。用户应该在条件=值&#39;中键入规范。格式。因此,如果他们键入limit = 10,那么它将打印10行。如果他们输入的丰富= 10,那么它将继续打印行,直到丰富的值达到10.我遇到的问题是当我输入某些值时我的程序将无限循环,我不确定原因是什么。例如,如果我输入lackient = 2它将正常工作,但如果我输入缺陷= 10,那么它将启动无限循环。但是,当我输入perfect = 10时,它只打印出1行。就像我的头衔说我是初学者而我无法弄清楚导致错误的原因。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试在循环中初始化sigma的值:

while (stop)
{    
    sigma = 0;
    ...
}

由于sigma永远不会重置为零,因此每个数字都会保持增长。因此,您将很快停止查找缺陷数字或完美数字,一切都将是丰富的。这就是丰富的关键词有效的原因,但缺点则不然。

相关问题