Saludos y felices fiestas.
Quiero compartir un código que hice ayer por la noche porque estaba aburrido y me gusta estudiar números binarios. Hice un convertidor de números decimales a números binarios en java. Me gustó mucho la manera con que lo hice porque da exactamente el número de bits que le corresponde a cada número a través de una lista simple. Esta aplicación se puede hacer de muchas formas, solo he hecho esta y se que la manera más sencilla es con esta estructura dinámica. El resto fue con propiedades matemáticas y un método sencillo para transformar decimales a binario.
A continuación, les comparto el código fuente de cada clase.
CLASE NODO
Código: java
CLASE LISTA SIMPLE
Código: java
CLASE APLICACIÓN BINARIO
Código: java
Eso fue todo. Espero que les haya gustado. Saludos otra vez y feliz año nuevo.
Quiero compartir un código que hice ayer por la noche porque estaba aburrido y me gusta estudiar números binarios. Hice un convertidor de números decimales a números binarios en java. Me gustó mucho la manera con que lo hice porque da exactamente el número de bits que le corresponde a cada número a través de una lista simple. Esta aplicación se puede hacer de muchas formas, solo he hecho esta y se que la manera más sencilla es con esta estructura dinámica. El resto fue con propiedades matemáticas y un método sencillo para transformar decimales a binario.
A continuación, les comparto el código fuente de cada clase.
CLASE NODO
public class Nodo {
private int _data;
private Nodo _prox;
public Nodo(int _data)
{
this._data = _data;
this._prox = null;
}
public int getData() {
return _data;
}
public void setData(int _data) {
this._data = _data;
}
public Nodo getProx() {
return _prox;
}
public void setProx(Nodo _prox) {
this._prox = _prox;
}
public void Mostrar()
{
System.out.print(_data);
}
}
CLASE LISTA SIMPLE
public class ListaSimple {
private Nodo _cabeza;
public ListaSimple()
{
this._cabeza = null;
}
public Nodo getCabeza() {
return _cabeza;
}
public void setCabeza(Nodo _cabeza) {
this._cabeza = _cabeza;
}
public void InsertarPrimero(Nodo n)
{
if(_cabeza == null)
{
_cabeza = n;
}
else
{
n.setProx(_cabeza);
_cabeza = n;
}
}
public void InsertaFinal(Nodo n)
{
if(_cabeza == null)
{
_cabeza = n;
}
else
{
Nodo aux = _cabeza;
while(aux.getProx() != null)
{
aux = aux.getProx();
}
aux.setProx(n);
}
}
public Nodo EliminaPrimero()
{
if(_cabeza == null)
{
return null;
}
else if(_cabeza.getProx() == null)
{
Nodo aux = _cabeza;
_cabeza = null;
return aux;
}
else
{
Nodo aux = _cabeza;
_cabeza = aux.getProx();
aux.setProx(null);
return aux;
}
}
public void EliminarTodo()
{
int cont = 0;
Nodo aux = _cabeza;
while(aux != null)
{
cont++;
aux = aux.getProx();
}
for (int i = 0; i < cont; i++) {
this.EliminaPrimero();
}
}
public void Mostrar()
{
Nodo aux = _cabeza;
while(aux != null)
{
aux.Mostrar();
aux = aux.getProx();
}
}
}
CLASE APLICACIÓN BINARIO
public class Binario {
/**
* @param args the command line arguments
*/
public int ContarBits(int n ,Binario bin)
{
int x = 0;
for (int i = 1; i <= n; i++) {
if(bin.EsPotenciade2(i))
{
x++;
}
}
return x;
}
public void TransformarBinario(int n, Binario bin, ListaSimple ls)
{
int cont = bin.ContarBits(n, bin);
for (int i = 1; i <= cont; i++) {
if(n % 2 == 0)
{
ls.InsertarPrimero(new Nodo(0));
}
else
{
ls.InsertarPrimero(new Nodo(1));
}
n = n / 2;
}
}
public boolean EsPotenciade2(int n)
{
return ((Math.log(n) / Math.log(2)) % 1 == 0);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ListaSimple ls = new ListaSimple();
Binario bin = new Binario();
int x = 0;
int num = 0;
int rsp = 1;
while(rsp == 1)
{
System.out.println("Ingrese un numero");
num = sc.nextInt();
bin.ContarBits(num, bin);
bin.TransformarBinario(num, bin, ls);
ls.Mostrar();
System.out.println("\n Desea convertir otro numero decimal a binario ? si(1), no(0) \n");
//SE INICIALIZA OTRA VEZ PARA SER UTILIZADO NUEVAMENTE
num = 0;
ls.EliminarTodo();
rsp = sc.nextInt();
}
}
}
Eso fue todo. Espero que les haya gustado. Saludos otra vez y feliz año nuevo.