当前位置: 首页 > 知识库问答 >
问题:

测试两个整数之和相等的布尔函数

刘弘济
2023-03-14

我写了一个接受两个整数的递归函数。如果第一个数字位数等于第二个数字,则函数返回true,否则函数返回false。

该函数始终返回true。

我做错了什么?

代码:

public static boolean amountEqual(int num1, int num2) {
    int sum1 = 0, sum2 = 0;

    if (num1 == 0 && num2 == 0 && sum1 == sum2)
        return true;
    else if (num1 == 0 && num2 == 0 && sum1 != sum2)
        return false;

    sum1 += num1 % 10;
    sum2 += num2 % 10;

    return amountEqual(num1 / 10, num2 / 10);
}

谢谢

共有3个答案

华安民
2023-03-14

首先,你的问题不明确。我假设如果两个数的数字和相等,您希望函数返回true。

其次,你假设数字的长度相等,而它们可能不是。

第三,您没有将Sum1Sum2作为参数传递。

更简单的方法是实现两个功能,如:

public static int digitSum(int num) {
    if (num > 0) {
        return num % 10 + digitSum(num / 10);
    }
    else
        return 0;
}

public static boolean amountEqual(int num1, int num2) {
    return digitSum(num1) == digitSum(num2);
}
孔俊爽
2023-03-14

每次调用 amountEqual 方法时,代码的前两行它用零初始化两个新变量 让我们跟踪您的递归

System.out.println(amountEqual(18,26));
      /* F(20,30) = F(18/10,26/10) [sum1 = 8 , sum2 = 6] 
           re init sum1 = 0 , sum2 =0

            F(1,2)  = F(1/10,2/10) [ sum1 = 1 , sum2 = 2] 
           re init sum1 = 0 , sum2 = 0 
                    F(0,0) = true */
任文乐
2023-03-14

我做错了什么?

您正在使用始终为零的总。您需要找到一种方法来传递 sum1sum2,以便最终调用可以根据所有先前的调用做出决定。

一种方法是使递归函数具有四个参数,并添加一个双参数重载来启动递归链:

public static boolean amountEqual(int num1, int num2) {
    return amountEqual(num1, num2, 0, 0);
}
private static boolean amountEqual(int num1, int num2, int sum1, int sum2) {
    ... // your recursive code goes here
}

另一种方法是计算数字微分,即< code>num1中数字的总和减去< code>num2中数字的总和,如果微分为零,则返回< code>true:

public static boolean amountEqual(int num1, int num2) {
    return digitDifferential(num1, num2) == 0;
}
private static int digitDifferential(int num1, int num2) {
    return (num1 != 0 || num2 != 0)
    ? num1%10 - num2%10 + digitDifferential(num1/10, num2/10)
    : 0;
}
 类似资料:
  • 我需要一个可以在junit 方法中调用的方法,该方法比较两个布尔值以检查它们是否相等,并返回一个布尔值。例如,类似这样的事情: 如果不相等,则返回false,如果相等,则返回true。我已经检查了布尔类,但是唯一接近的是< code>Boolean.compare(),它返回一个int值,我不能使用这个值。

  • 问题内容: 我想知道如何检查两个功能是否相同。一个示例将评估为true。据我所知,Python将检查函数是否在内存中占据相同的位置,而不是它们是否具有相同的操作。我知道拥有该功能似乎不切实际。 另一个解决方案是我可以在函数上运行以查看其包含的内容或工作方式的某些方法。因此,其中一种将返回该方法的工作方式,可能是在字典中还是在某种形式中。 我希望得到一个答案,但我怀疑这是可能的。 问题答案: 如果您

  • 我正在我的大学课程中研究一个简单的JAVA问题。我被这个节目难住了。我将展示我到目前为止所拥有的,并给出我必须回答的问题。我也在StackOverflow上看了一个类似的问题,但它不是同一个问题,所以没有帮助。我需要编写的程序是: 编写一个使用“while”循环执行以下步骤的程序: a、 )提示用户输入两个整数:“firstNum”和“secondNum”(firstNum必须小于secondNu

  • 本文向大家介绍JavaScript的布尔函数?,包括了JavaScript的布尔函数?的使用技巧和注意事项,需要的朋友参考一下 布尔函数 在开发过程中,开发人员可能会遇到是/否的情况。那时可以使用Boolean()函数。它只会导致true或false。让我们详细讨论它。 语法 它接受一个表达式并对其进行仔细检查,并根据表达式的有效性显示true或false。 示例1 在下面的示例中,使用Boole

  • 和返回其他任何类型一样,函数也能返回布尔值,将复杂的条件测试隐藏在函数中非常方便。例如: bool isSingleDigit (int x) { if (x >= 0 && x < 10) { return true; } else { return false; } } 函数名是isSingleDigit。布尔函数常见的命名方式是,让名字听起来像是在提问题,回答是

  • 问题内容: 以下代码 使用V1.7.0_15 编译时没有错误,并且在运行时显示“ false”。但是,Eclipse Juno抱怨“操作数类型对象和布尔值不兼容”。 显然,javac自动装箱原始boolean ,然后通过对象相等(yielding)进行比较和自动装箱,而Eclipse拒绝执行自动装箱。 根据Java语言规范,哪种行为正确?我应该在哪里提交错误? 注意: 如果将的类型更改为,则事情将