Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Sergio Perez en 03 de Mayo 2021, 22:30

Título: Conversión de un numero decimal a base "n" con recursividad en JAVA caso base
Publicado por: Sergio Perez en 03 de Mayo 2021, 22:30
Buen día a todos!!! Espero me puedan orientar, tengo el siguiente código:

Código: [Seleccionar]
import javax.swing.JOptionPane; //Clase Decimal.java

public class Decimal
{
        public static void main(String[] args)
        {
        int numero = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese el número en base 10: "));                                                                                     
       
        int base = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese la base a transformar..."));
        Base bases = new Base(numero,base);
        bases.transformar();
        JOptionPane.showMessageDialog(null,"El número "+numero+" en base "+base+" es:\n"+bases.getResultado());               
       
        }
}

class Base //Clase Base.java
{
String equivalente; 
int posicion; 
int numero; 
int base; 
int[] digitos;
int[] auxiliar;
                 
        public Base(int n, int b)
        {
                posicion = 0;
                equivalente = "";
                base = b;
                numero = n;
                digitos = new int [1];
        }
                           
        public void transformar()
        {
                if(numero<base)
                {
                        digitos[posicion]=numero;
                        tamaño();
                }
                else
                {
                        digitos[posicion]=numero%base;
                        tamaño();
                        posicion++;
                        numero = numero/base;
                        transformar();
                 }
        }
                 
        public String getResultado()
        {
                for (int j = digitos.length-2; j >= 0; j--)
                {
                        equivalente+=Character.toUpperCase(Character.forDigit(digitos[j], 16));
                }
                return equivalente;
        }
                               
        private void tamaño()
        {
                 auxiliar = digitos;
                 digitos = new int [auxiliar.length+1];
                 System.arraycopy(auxiliar, 0, digitos, 0, auxiliar.length);
        }
}


El problema que tengo es si hay una manera de sustuir el "for" que tengo en la siguiente parte de clase "Base" :

Citar
public String getResultado()
        {
                for (int j = digitos.length-2; j >= 0; j--)
                {
                        equivalente+=Character.toUpperCase(Character.forDigit(digitos[j], 16));
                }
                return equivalente;

        }

por algún "if-else" ya que según tengo entendido no se puede utilizar "for o while" para la recursividad  :(
Título: Re: Conversión de un numero decimal a base "n" con recuursividad en JAVA
Publicado por: Kabuto en 04 de Mayo 2021, 01:19
Para que un método recursivo funcione ha de recibir parámetros por argumentos, los cuáles se van modificando en cada llamada recursiva.

Así que si quieres seguir usando getResultado() tal cuál, quizás se pueda solucionar creando un segundo método de apoyo, que sería el recursivo.
Por cierto, al margen de esto, el String llamado equivalencia que tienes declarado como atributo de clase, debería reiniciarse a "cadena vacía" cada vez que llamas al método getResultado().
Si durante la ejecución del programa solo llamas una vez a ese método, no pasa nada.
Pero si se le llamase varias veces, cada vez que se le llama se concatenará la equivalencia computada anteriormente con la actual.

De hecho, no parece que sea necesario declarar ese String como atributo de clase, pero bueno, si lo quieres mantener así, y resolver el computo de manera recursiva, quizás funcione algo como lo que pondré a continuación.
No lo he probado..., en mi "compilador mental" diría que funciona je je...  ;D, pero no es muy fiable así que si no funciona o da resultados raros, dímelo y ya haré pruebas más fiables.

Un saludo.

Código: [Seleccionar]
        public String getResultado()
        {
                equivalente = ""; //Reiniciamos a cadena vacía
                equivalente = computaEquivalencia(digitos.length-2); //Método recursivo
                return equivalente;
        }

        private String computaEquivalencia(int indice)
        {
                if (indice < 0)
                        return ""; //Fin de las llamadas recursivas
                else
                        return Character.toUpperCase(Character.forDigit(digitos[indice], 16)) + computaEquivalencia(--indice);
        }
Título: Re: Conversión de un numero decimal a base "n" con recuursividad en JAVA
Publicado por: Sergio Perez en 04 de Mayo 2021, 01:30
Que grande que sos Kabuto!!!  8)

No había tomado en cuenta lo de la concatenación que mencionas por las prisas pero corre bastante bien, de verdad que ha sido de gran ayuda  :D :D :D