2017-04-09 28 views
0

我想我主要是为了解决家庭作业问题。递归地添加两个二进制数字,无位运算; Java家庭作业

这是一个201 CS类。现在我只想要正确的逻辑。目前,它没有按照预期运作,但它很接近。

我们不想使用.toBinary,按位或其他任何东西。我们也没有教过stringBuilder,所以我想避免使用它。

有一个System.out.println();在从底部到顶部阅读控制台的方法中提供正确的答案。

public static void main(String[] args) { 

     System.out.println(addBin(1100111011,1101110011)); 
} 

public static String addBin(int num1,int num2){ 

    String result = ""; 

    if(num1 > 0 || num2 > 0){ 

     int part1 = num1%10, part2 = num2%10; 
     int rem1 = num1/10, rem2 = num2/10; 

     result += Integer.toString((part1 + part2)%2); 

     //System.out.println(result); 

     int carry = (part1 + part2) /2; 

     addBin(rem1 + carry, rem2); 

     return result; 

    } 

    return result; 

} 

所以,这个示例添加1100111011和1101110011与输出

0 
1 
1 
1 
0 
1 
0 
1 
0 
1 
1 
0 

时,正确的答案是11010101110.

我无法理解如何正确地“啪”的“结果“部分正确。你能否帮我理解这个过程,可能是在这个问题的背景下?

谢谢!

+0

你想'System.out.println(addBin(0b1100111011,0b1101110011));'? –

+0

我不知道。这些是直接来自用户输入的“二进制”数字。就像,我应该能够从某个地方在扫描仪中获取这些数字。 –

+0

'addBin'返回一个值;你应该使用该返回值。这可能有助于不创建'result'变量,而只需考虑两个值'addBin(rem1 + carry,rem2)'和'Integer.toString((part1 + part2)%2)'。 – Ryan

回答

0

正如您从输出中看到的那样,您会以相反的顺序得到正确的结果,但不会将任何较旧的结果附加到当前计算的结果中。

在你的if条件中,你调用了addBin()函数,但是你没有使用它在任何地方给出的结果。只要改变该行于以下内容:

result = addBin(rem1 + carry, rem2)+result; 

这应该有效追加在当前答案的前面所有结果,这样你就不会得到结果向后方向。希望这可以帮助。