我正在尝试再次进行学校测验。如果我的结果等于数字“x”,我正在尝试匹配。我写了一个递归函数,我总是得到值0,而不是我用来调用函数的那个(比如153)。我应该改变什么?
public static boolean isArmstrong(int x, Armstrong s) {
while (a != true) {
while (x != 0) {
int number = x / 10;
int remain = x % 10;
s.push(remain);
return isArmstrong(number, s);
}
a = true;
}
if (getResult() == x) {
System.out.println("True , result is : " + getResult());
} else {
System.out.println("False , x is : " + x + " result is : " + getResult());
//x always prints out 0 which ends the while loop.But i need to get the x value when i call the function
}
return true;
}
}
答案 0 :(得分:0)
您提供了不完整的信息,没有方法getResult()
的定义,也没有类型Armstrong s
的定义,但我们仍然可以解决一些问题。首先,您的布尔方法isArmstrong()
永远不会返回false
,只返回true
,因此我们不能指望它检测到非阿姆斯特朗数字。其次,你在递归方法中做得太多了,包括对阿姆斯壮数的测试和结果的公布 - 这些最好用不同的方法处理。
下面是一个返回,它将isArmstrong()
从布尔方法更改为将其计算作为整数返回的方法。输入值为零会中断递归,从而导致返回结果。我们使用单独的函数将参数isArmstrong()
与返回值进行比较,以宣布成功或失败:
public class Armstrong
{
public static int isArmstrong(int x, int power) {
if (x != 0) {
int quotient = x / 10;
int remainder = x % 10;
return (int)Math.pow(remainder, power) + isArmstrong(quotient, power);
}
return 0;
}
public static void main(String args[]) {
int number = 0, power = 0;
if (args.length > 0) {
try {
power = args[0].length();
number = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.err.println("Argument " + args[0] + " must be an integer.");
System.exit(1);
}
}
int result = isArmstrong(number, power);
if (result == number) {
System.out.println("True, result is: " + result);
} else {
System.out.println("False, number is: " + number + " but result is: " + result);
}
}
}
<强>输出强>
> java Armstrong 153
True, result is: 153
> java Armstrong 123
False, number is: 123 but result is: 36
> java Armstrong 1634
True, result is: 1634
> java Armstrong 1635
False, number is: 1635 but result is: 2003
>