Ybadoo - Soluções em Software Livre
Tutoriais
Programação Orientada a Objetos

(Vianna, 1914) A base de um sistema de numeração é o número de unidades de uma ordem qualquer, necessário para formar uma unidade de ordem imediatamente superior. A base de um sistema de numeração pode ser um número inteiro qualquer, de modo que há uma infinidade de sistemas de numeração, e nesses diversos sistemas os números inteiros são representados com tantos algarismos quantas forem as unidades da base. Os sistemas de numeração tem seu nome derivado da sua base, ou seja, o sistema binário tem base dois, o sistema octal tem base oito e o sistema decimal tem base dez. Desenvolva um sistema que realizar a conversão entre bases, aceitando números escritos na base dois ou binária até a base trinta e seis, cujo alfabeto é composto pelos elementos {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z}. Desenvolva a solução solicitada, apresentando a modelagem do projeto em Unified Modeling Language (UML) e a sua implementação.

 

Diagrama de Classes na Linguagem de Programação Java Converter.java Application.java
Diagrama de Classes
Diagrama de Classes na Linguagem de Programação Java

Arquivo Converter.java

/*************************************************************************
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)  *
 *                  Ybadoo - Solucoes em Software Livre (ybadoo.com.br)  *
 *                                                                       *
 * Permission is granted to copy, distribute and/or modify this document *
 * under the terms of the GNU Free Documentation License, Version 1.3 or *
 * any later version published by the  Free Software Foundation; with no *
 * Invariant Sections,  no Front-Cover Texts, and no Back-Cover Texts. A *
 * A copy of the  license is included in  the section entitled "GNU Free *
 * Documentation License".                                               *
 *                                                                       *
 * Ubuntu 16.10 (GNU/Linux 4.8.0-39-generic)                             *
 * OpenJDK Version "1.8.0_121"                                           *
 * OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)               *
 *************************************************************************/

package com.ybadoo.tutoriais.poo.tutorial07.exercicio07;

/**
 * Classe responsável pela conversão entre bases numéricas
 */
public class Converter
{
  /**
   * Delimitador da base numérica
   */
  private char delimiter;

  /**
   * Construtor padrão
   */
  public Converter()
  {
    this('/');
  }

  /**
   * Construtor para inicializar o delimitador da base numérica
   *
   * @param delimiter delimitador da base numérica
   */
  public Converter(char delimiter)
  {
    this.delimiter = delimiter;
  }

  /**
   * Converter o número para a base decimal
   *
   * @param number número a ser convertido
   * @return número na base decimal
   */
  public int convert(String number)
  {
    int position = number.indexOf(delimiter);

    if(position < 0)
    {
      throw new NumberFormatException("Base unknown for input string: \"" + number + "\"");
    }

    String value = number.substring(0, position);

    int base = Integer.parseInt(number.substring(position + 1));

    if((base < 2) || (base > 36))
    {
      throw new NumberFormatException("Base not supported: " + base);
    }

    return Integer.parseInt(value, base);
  }

  /**
   * Converter o número para a base especificada
   *
   * @param number número a ser convertido
   * @param radix base especificada
   * @return número na base especificada
   */
  public String convert(String number, int radix)
  {
    if((radix < 2) || (radix > 36))
    {
      throw new NumberFormatException("Radix not supported: " + radix);
    }

    int decimal = convert(number);

    return Integer.toString(decimal, radix).toUpperCase() + delimiter + radix;
  }
}

Arquivo Application.java

/*************************************************************************
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)  *
 *                  Ybadoo - Solucoes em Software Livre (ybadoo.com.br)  *
 *                                                                       *
 * Permission is granted to copy, distribute and/or modify this document *
 * under the terms of the GNU Free Documentation License, Version 1.3 or *
 * any later version published by the  Free Software Foundation; with no *
 * Invariant Sections,  no Front-Cover Texts, and no Back-Cover Texts. A *
 * A copy of the  license is included in  the section entitled "GNU Free *
 * Documentation License".                                               *
 *                                                                       *
 * Ubuntu 16.10 (GNU/Linux 4.8.0-39-generic)                             *
 * OpenJDK Version "1.8.0_121"                                           *
 * OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)               *
 *************************************************************************/

package com.ybadoo.tutoriais.poo.tutorial07.exercicio07;

/**
 * Classe responsável pela execução da conversão entre bases
 */
public class Application
{
  /**
   * Construtor para inicializar a execução da classe Converter
   */
  private Application()
  {

  }

  /**
   * Método principal da linguagem de programação Java
   *
   * @param args argumentos da linha de comando (não utilizado)
   */
  public static void main(String[] args)
  {
    Converter converter = new Converter();
    
    // 411787
    System.out.println(converter.convert("Kona/27"));
    
    // 411787/10
    System.out.println(converter.convert("Kona/27", 10));
  }
}

Vianna, João José Luiz. (1914). Elementos de Arithmetica. 15ª edição. Rio de Janeiro: Livraria Francisco Alves. 296 páginas.