【问题标题】:Calculating Perfect Numbers计算完美数字
【发布时间】:2013-12-05 00:42:38
【问题描述】:

看,我有一个布尔方法,它通过一个除数来修改数字来获取除数,该除数由一个 for 循环检查并确定为真(不是第一个,它只是循环程序以获得确定的输入量. 我不确定是否有某种方法可以获取循环的多个结果并将它们加在一起,但这是我需要做的。现在我正在显示循环的结果,但那是为了调试,最终输出将是它是否丰富(添加的除数超过数字),完美(添加的除数等于数字)或不足(添加的除数小于数字) 这是eclipse中的代码:

import java.util.*;
public class PerfectNumber {

    /**
     * @param args
     */
    public static void main(String[] args) {
        for(int i = 0; i < 15; i++)
        {
            Scanner reader = new Scanner(System.in);
            int number = 0;
            int divisor = 1;
            int addnum = 0;
            System.out.println("Please input a number to check if it is perfect, abundant, or deficient");
            number = reader.nextInt();

            for(divisor = 1; divisor < number; divisor++)
            {
                isDivisor(number, divisor);
                if(isDivisor(number, divisor) == true)
                {
                    System.out.println(divisor);
                }
            }
        }   
    }

    static boolean isDivisor(int number, int divisor)
    {
        if (number % divisor == 0)
            return true;
        else 
            return false;
    }

}

【问题讨论】:

  • 澄清一下,您的意思是如果isDivisor 返回true,您希望将该除数(不是数字)添加到所有其他真正的isDivisor 数字中吗?

标签: java boolean static-methods boolean-logic perfect-numbers


【解决方案1】:

回答你的直接问题是什么闻起来像家庭作业问题;)

我不确定是否有某种方法可以获取循环的多个结果并将它们加在一起

你可以检查你的函数的返回就像你已经在做的那样并增加一个计数器

public boolean isSeven(int x){
    return x == 7;
}

public static void main(String[] args){
    int sumOfSevens= 0;
    int i = 0;
    while(i < 10){
        if(isSeven(7)){
            sumOfSevens = sumOfSevens + 7; // or +=
            ++i;
        }
    }
    // At this point sumOfSevens = 70;
} 

【讨论】:

    【解决方案2】:

    您不需要isDivisor,因为它等于以下表达式:

    number % divisor == 0
    

    只需总结除数:

    int  numDivSum = 0;       
    
    for(divisor = 1; divisor < Math.sqrt(number); divisor++)
    {
    
        if(number % divisor == 0)
        {
            numDivSum += divisor;
        }
    }
    

    检查numDivSum 是完美的、丰富的还是不足的。

    【讨论】:

      【解决方案3】:

      如果你想在一个循环中求和,你可以使用如下语句:

      Int sum;
      // your for loop start
          If ( isDivisor(number, divisor))
              sum += divisor;
         // end of loop
         //here you can do the comparison.
      

      没有必要在你的 if 语句中与 true 进行比较。如果您在 if 正文中只有一个语句,则此代码 n-p 也仅适用。如果你需要做多件事,你必须把整个事情放在括号里。

      此外,您对 isDivisor 的第一次调用也是无用的,因为您没有对所获得的价值做任何事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 2022-11-09
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        相关资源
        最近更新 更多