使用递归来传递带有基本情况的参数

时间:2016-05-05 17:15:07

标签: java recursion base

我正在尝试完成printConvertedNumber方法以使用递归来打印第二个参数指定的数字基数中的第一个参数。转换为基数2,4和8都使用相同的算法。具有所需基数作为右操作数的%和/运算符用于将数字转换为所需的基数。我试图不在类中声明任何新的变量或对象。

这里应该是什么样的,sample

这是我到目前为止所做的,请注意我的尝试不起作用

import java.util.Scanner;

class NumberBaseConversion
{
  public static void main(String[] args)
  {
    Scanner input = new Scanner(System.in);

    int number,
        base;

    do
    {
      System.out.print("Enter a positive base 10 number: ");
      number = input.nextInt();
    } while (number <= 0);
    do
    {
      System.out.print("Enter a base (2, 4, or 8): ");
      base = input.nextInt();
    } while (base != 2 && base != 4 && base != 8);
    printConvertedNumber(number, base);
    System.out.println();
  }

  private static void printConvertedNumber(int num, int base)
  {
    if (base <= 0) 
    { 
      return; 
    }
    System.out.println("num: " + num + ", base: " + base);
    printConvertedNumber(num/base,num%base);
  }
}

这是我运行时的结果

what i get

1 个答案:

答案 0 :(得分:1)

问题在于您的printConvertedNumber方法。一旦num降到0以下,您就不会检查。此外,对该方法的递归调用稍微偏离。试试这个:

private static void printConvertedNumber(int num, int base) {
    if (num <= 0) {
        return;
    }
    printConvertedNumber(num / base, base);
    System.out.print(num % base);
}

以下是一些示例运行:

  

运行:
  输入正数10:10   输入基数(2,4或8):2
  1010

     

运行:
  输入正数10:4   输入基数(2,4或8):2
  100

     

运行:
  输入正数10:10   输入基数(2,4或8):8
  12个

     

运行:
  输入正数10:10   输入基数(2,4或8):4
  22

     

运行:
  输入正数10的数字:23
  输入基数(2,4或8):4
  113

您可以针对this website查看答案 此外,在JGrasp上的荣誉。那是我的第一个IDE。