我的Java编码问题是使用布尔方法找到完美的数字。我想打印出这样的: 示例: '6是一个完美的数字。 6是1,2,3'的总和 除此以外 : '9不是一个完美的数字'
但我不知道如何编码“6是1,2,3的总和”。谁能帮我? 这是我的编码:
import java.util.Scanner;
public class trial
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner perfect = new Scanner(System.in);
System.out.print("Enter any integer number : ");
int n = perfect.nextInt();
if(isPerfectNumber(n))
{
System.out.println(n+" is a perfect number");
}
else
{
System.out.println(n+" is not a perfect number");
}
}
public static boolean isPerfectNumber(int n)
{
int sum = 0;
for (int i=1; i<n; i++)
{
if (n%i == 0)
{
sum = sum + i;
}
}
if (sum == n)
{
return true;
}
else
{
return false;
}
}
}
答案 0 :(得分:1)
嗯,您已经知道如何根据if (n%i == 0)
行获取数字因素。
所以,提示只是因为这几乎肯定是班级工作。
在同一点上,您将该因子添加到总和中,您应该将其添加到某些描述的列表中,并使其可用于调用函数。
一种可能性是返回一个列表,第二个和后续元素是给定数字的所有因子,第一个元素是那些的总和。
因此,对于6
,您会获得列表{6, 1, 2, 3}
,12
会给您{16, 1, 2, 3, 4, 6}
,7
会给您{7, 1}
}。
这样,您只需要针对第一个元素检查原始数字,如果它们相等,则打印出其他元素。换句话说,伪代码如:
input num
factorList = getFactorList(num)
if factorList[0] == num:
print num, " is perfect, factors are:"
for idx = 1 to factorList.size() - 1 inclusive:
print " ", factorList[idx]
println "."
else:
println num, " is not perfect."
答案 1 :(得分:1)
我会更改isPerfectNumber
以返回List
或n
的{{1}}因素,如果它不是一个完美的数字。然后你有一个结果都包含因子,可以用来确定null
是否完美:
n
答案 2 :(得分:0)
在for循环中,如果条件是模数为真,那么你知道i
必须以某种方式保持在轨道上。
所以我愿意 声明一个整数的arraylist来跟踪总和数。
ArrayList<Integer> numbs = new ArrayList<Integer>();
然后
public static boolean isPerfectNumber(int n)
{
int sum = 0;
for (int i=1; i<n; i++)
{
if (n%i == 0)
{
numbs.add(i); //here keep track of those summation numbers
sum = sum + i;
}
}
if (sum == n)
{
return true;
}
else
{
return false;
}
}
现在打印时你可以这样做
System.out.println(n + " is a perfect number. " + n + " is sum of " + StringUtils.join(numbs, ","));
不要忘记导入StringUtils:import org.apache.commons.lang3.StringUtils commons-lang3
库。