Hoy veremos dos maneras de convertir un número decimal a uno octal en Java.
El primer método es algo ya programado e integrado dentro de la API de Java, y el segundo es un método manual que nos permitirá portar el algoritmo a otros lenguajes si así lo queremos.
Es decir, veremos dos maneras, la forma integrada y la forma manual programada por nosotros.
Nota: anteriormente ya hice la conversión octal a decimal en Java.
Decimal a octal en Java con Integer.toOctalString
Existe un método estático de la clase Integer, el mismo se llama toOctalString, recibe un número entero y devuelve una cadena con su representación octal. Para llamarlo usamos los siguiente:
String octal = Integer.toOctalString(numeroDecimal);
Lo veremos de manera más clara en los ejemplos de abajo.
Conversión decimal a octal con lógica propia
Podemos realizar este algoritmo manualmente. Simplemente tenemos que obtener el residuo de dividir el número decimal entre 8; el residuo lo agregamos a la izquierda del número octal y después vamos dividiendo el decimal entre 8.
public static String decimalAOctal(int decimal) {
String octal = "";// Almacenamos el número octal que será el resultado
String caracteresOctales = "01234567";
while (decimal > 0) {
int residuo = decimal % 8;
// El residuo es lo que se suma, y podemos usarlo como índice
// Recordemos que el carácter se pone "a la izquierda", por eso
// concatenamos el carácter y luego lo que ya lleva sumado el octal
octal = (caracteresOctales.charAt(residuo) + octal);
// Lo vamos dividiendo entre 8 para que en algún momento llegue a 0
decimal /= 8;
}
return octal;
}
Al final el decimal será 0, y el ciclo se romperá para finalmente devolver el número octal.
Poniendo todo junto con ejemplos
Ahora veamos ambos métodos en ejecución; todo el código queda así:
/*
____ _____ _ _ _
| _ \ | __ \ (_) | | |
| |_) |_ _ | |__) |_ _ _ __ _____| |__ _ _| |_ ___
| _ <| | | | | ___/ _` | '__|_ / | '_ \| | | | __/ _ \
| |_) | |_| | | | | (_| | | / /| | |_) | |_| | || __/
|____/ \__, | |_| \__,_|_| /___|_|_.__/ \__, |\__\___|
__/ | __/ |
|___/ |___/
Blog: https://parzibyte.me/blog
Ayuda: https://parzibyte.me/blog/contrataciones-ayuda/
Contacto: https://parzibyte.me/blog/contacto/
Copyright (c) 2020 Luis Cabrera Benito
Licenciado bajo la licencia MIT
El texto de arriba debe ser incluido en cualquier redistribucion
*/
public class Main {
public static void main(String[] args) {
int decimal = 2811;
String octal = Integer.toOctalString(decimal);
System.out.printf("El decimal %d es %s en octal usando Integer.toOctalString\n", decimal, octal);
octal = decimalAOctal(decimal);
System.out.printf("El decimal %d es %s en octal usando metodo manual\n", decimal, octal);
}
public static String decimalAOctal(int decimal) {
String octal = "";// Almacenamos el número octal que será el resultado
String caracteresOctales = "01234567";
while (decimal > 0) {
int residuo = decimal % 8;
// El residuo es lo que se suma, y podemos usarlo como índice
// Recordemos que el carácter se pone "a la izquierda", por eso
// concatenamos el carácter y luego lo que ya lleva sumado el octal
octal = (caracteresOctales.charAt(residuo) + octal);
// Lo vamos dividiendo entre 8 para que en algún momento llegue a 0
decimal /= 8;
}
return octal;
}
}
Si lo ejecuto, el resultado es:
Los resultados son correctos. Puedes comprobarlos en este conversor decimal a octal online.
Si quieres, también puedes ver más ejercicios sobre Java en mi blog. Recuerda que en otro post hice la conversión octal a decimal en Java.