2016-02-29 2 views
0

Мне нужно создать рекурсивный метод для преобразования базовых 10 чисел в любые базовые числа. http://i.stack.imgur.com/nJMmm.jpgномер базы преобразования рекурсивный метод

  • Если основание 2, то префикс строки с «0b»
  • Если основание 16, то префикс строки с «0x»
  • Если основание не является 10, то никакого префиксом (или постфикс)
  • во всех остальных случаях суффиксом строку с основанием в квадратных скобках

Примеры:

  • Если значение равно 212 и основание 2, то метод возвращает «0b11010100»
  • Если значение равно 212 и основание 10, то метод возвращает «212»
  • Если значение равно 212 и основание 12, то метод возвращает «119 [база 12]»
  • Если значение равно 212 и основание 20, то метод возвращает «AC [основание 20]»
  • Если значение равно 212 и основание 16, то метод возвращает «0xD4»
  • Если значение равно 212, а основание равно 60, тогда метод возвращает «3.32 [основание 60]»

Моя проблема заключается в том, что «во всех остальных случаях постфиксная строка с базой в квадратных скобках» бит. Я не могу разобраться. Не могли бы вы помочь, пожалуйста?

Вот мое общее решение:

public class NaturalNumber { 
private int value; 

public NaturalNumber(int value){ 
    this.value = value; 
} 

public void setValue(int value){ 
    this.value = value; 
} 

public int getValue(){ 
    return value; 
} 


@Override 
public String toString() { 
    return Integer.toString(value); 
} 

public String getValueBase(int base){ 
    return getValueBase(value, base); 
} 

public static String getValueBase(int value, int base){ 
    int quotient = value/base; 
    int remainder = value % base; 
    char ch = (char)(remainder+55); 



    if(quotient <= 0) { 
     if(remainder >= 10 && remainder <= 36){ 
      if(base==16) 
       return "0x" + ch; 
      return "" + ch; 
     } 
     else { 

      if(base==2) 
       return "0b" + remainder; 
      if(base==16) 
       return "0x" + remainder; 
      return "" + remainder; 
     } 
    } 
    else 
    { 

     if(base > 36){ 
      return getValueBase(quotient, base) + "." + remainder; 
     } 
     if(remainder >= 10 && remainder <= 36){ 
      return getValueBase(quotient, base) + ch; 
     } 
     return getValueBase(quotient, base) + remainder; 
    } 
} 

public static void main(String[] args) { 
    NaturalNumber n = new NaturalNumber(68654332); 
    System.out.println(n.getValueBase(38)); 
} 
} 
+1

Вы не задали вопрос. – shmosel

+0

Моя проблема заключается в добавлении [base] в конец. Не могли бы вы помочь, пожалуйста? – Isidore

+0

Еще не вопрос. – shmosel

ответ

0

Вы думаете об этом неправильно, это не должно быть сделано в рекурсивном цикле. Хотя, если вы пройдете базовую станцию ​​по всему циклу, вы можете добавить ее до конца, когда попадете в базовый регистр цикла. Кроме того, вам нужно будет передать некоторый тип параметра (логический), который является истинным только при первом вызове функции.

public String getValueBase(int base){ 
     switch (base){ 
      case 2: 
       return "0b" + getValueBase(value, base) ; 
      case 10: 
       return "0x" + getValueBase(value, base) ; 
      default: 
       return getValueBase(value, base) + "[base" + base + "]" ; 
     } 


    } 

Постфиксное добавление в последнем вызове метода в рекурсивном стеке.

public static String getValueBase(int value, int base){ 

     int quotient = value/base; 
     int remainder = value % base; 

     if(quotient == 0){ 
      //Base case + Postfix 
      return remainder + (base != 2 && base != 16 && base != 10) ? "[base"+base+"]" : ""; 
     } 
     else 
      // Another recursive call 
      return getValueBase(remainder, base); 


    } 
+0

спасибо, но для моего назначения требуется решение в методе – Isidore

+0

. Тогда вам понадобится третий параметр для вашего метода. Public static String getValueBase (int value, int base, boolean postfix) – heniv181

+0

Обновлено с добавлением постфикса. Кроме того, у вас много «волшебных чисел» в вашем решении, что делает его склонным к ошибке. Что делать, если это отрицательное число? – heniv181

Смежные вопросы