使用递归时,方法中的调用方法会得到不同的结果

时间:2018-04-19 12:34:28

标签: java recursion

我有两种方法,binToDec将二进制中的用户输入转换为十进制,将decToHex转换为十进制转换为十六进制。

public static int binToDec(int num){

  int result = 0;
  int exp = 0;
  while(num != 0){
     int x = num %10;
     result += x *Math.pow(2,exp);
     exp++;
     num = num / 10;
  }
  return result;          
} 


public static String decToHex(int num){
  String result = "";
  int n = num;
  int remainder = n % 16;

  if (n == 0) {
     return "";
  } else {
     switch (remainder) {
        case 10:
           result = "A";
           break;
        case 11:
           result = "B";
           break;
        case 12:
           result = "C";
           break;
        case 13:
           result = "D";
           break;
        case 14:
           result = "E";
           break;
        case 15:
           result = "F";
           break;
        default:
           result = remainder + result;
           break;
     }
     String finalResult = decToHex(n/ 16 ) + result;
     return finalResult;

  }
} 

问题是当我创建一个名为binToHex的新方法将二进制转换为十六进制时,当我将它与在线转换器进行比较时,结果会有所不同。我只从上面调用了方法。这是我的binToHex

public static String binToHex(int num) {
  int binToDec = binToDec(num);
  String result = decToHex(num);
  return result;
  }

例如:当我在binToHex中输入 1011 时,我的结果为 3F3 但是,当我首先输入<在binToDec上强> 1011 ,然后在binToDec上使用decToHex的结果,我得到 B ,这是正确答案。当我把它们放在方法中时为什么会有所不同?

3 个答案:

答案 0 :(得分:0)

实际上这只是一个小错误。您应该String result = decToHex(num);而不是String result = decToHex(binToDec);。如您所见,您要求的是1011(十进制)的十六进制,即3F3。

答案 1 :(得分:0)

你有一个拼写错误,decToHex(num)应该是decToHex(binToDec),所以你在第二个函数中使用第一个函数的结果。

public static String binToHex(int num) {
  int binToDec = binToDec(num);
  String result = decToHex(binToDec); // Typo was here
  return result;
}

答案 2 :(得分:0)

您在decToHex而不是binToDec中调用num,这就是您输出错误的原因。只是一个错字。