programas en java

rojito
12 de Octubre del 2004
holas como estan?¿, bueno mas que una consulta les propongo algo, yo me estoy iniciando en la programacion en java, tengo un codigo que trata de sumar, restar y multiplicar numeros binarios sin pasarlos a decimal, a mi parecer me hice muchas bolas y me enerede, bueno la suma y la resa corre pero la multiplicacion ............, miren el codigo y pues diganme sus criticas para empezar a mejorar mi programacion, aca les va en codigo:
public class sumbinario
{
private int [] bin=new int[8];
private int [] h1=new int[15];
private int [] h2=new int[15];
private int [] h3=new int[15];
private int [] ord1=new int[8];
private int [] ord2=new int[8];
public sumbinario()
{
for(int i=0;i<bin.length;i++)
bin[i]=0;
}
public sumbinario(int b1,int b2,int b3,int b4,int b5,int b6,int b7,int b8)
{
bin[0]=b1;
bin[1]=b2;
bin[2]=b3;
bin[3]=b4;
bin[4]=b5;
bin[5]=b6;
bin[6]=b7;
bin[7]=b8;
}
public sumbinario suma(sumbinario s)
{
sumbinario sum=new sumbinario();
int i=7;int b=0;
while(i>=0)
{
if(bin[i]==0 && s.bin[i]==0)
{
if(b==1)
{
sum.bin[i]=1;
b=0;
i--;
}
else
{
sum.bin[i]=0;
i--;
}
}
else if(bin[i]==1 && s.bin[i]==1)
{
if(b==1)
{
sum.bin[i]=1;
b=1;
i--;
}
else
{
sum.bin[i]=0;
b=1;
i--;
}
}
else if(bin[i]==1 && s.bin[i]==0 || bin[i]==0 && s.bin[i]==1)
{
if(b==1)
{
sum.bin[i]=0;
b=1;
i--;

}
else
{
sum.bin[i]=1;
i--;
}
}
}
if(b==1)
{
i=7;
while(i>=0)
{
if(bin[i]==0 && s.bin[i]==0)
{
if(b==1)
{
sum.bin[i]=1;
b=0;
i--;
}
else
{
sum.bin[i]=0;
i--;
}
}
else if(bin[i]==1 && s.bin[i]==1)
{
if(b==1)
{
sum.bin[i]=1;
b=1;
i--;
}
else
{
sum.bin[i]=0;
b=1;
i--;
}
}
else if(bin[i]==1 && s.bin[i]==0 || bin[i]==0 && s.bin[i]==1)
{
if(b==1)
{
sum.bin[i]=0;
b=1;
i--;
}
else
{
sum.bin[i]=1;
i--;
}
}
}
}
return sum;
}
public sumbinario resta(sumbinario r)
{
sumbinario rest=new sumbinario();

for(int i=0;i<bin.length;i++)
{
if(bin[i]==0)
rest.bin[i]=1;
else
rest.bin[i]=0;
}
return rest;
}
public String obtenerbinario()
{
System.out.print("el numero resultante es:");
for(int i=0;i<bin.length;i++)
System.out.print(bin[i]);
return "";
}
/////////////////////////////multiplicacion/////////////////////////////////////////////
public sumbinario multiplicacion(sumbinario m)
{
sumbinario mult=new sumbinario();
int x=7;int b=0;

while(x>0)
{
for(int w=7;w>=0;w--)
{ System.out.println("****************"+x);
int y=0;int i;int l=0;
for(i=0;i<bin.length;i++)
{
mult.bin[i]=m.bin[i]*bin[w];

System.out.println("*1*"+"m.bin["+i+"] "+m.bin[i]+" *bin["+w+"] "+bin[w]+" = "+mult.bin[i]);

}
for(i=0;i<bin.length;i++)
{

mult.ord1[i]=m.bin[i]*bin[w-1];

System.out.println("*2*"+"m.bin["+i+"] "+m.bin[i]+" *bin["+w+"] "+bin[w]+" = "+mult.ord1[i]);
}
System.out.println("**");
y=0;
for(i=x;i<x+8;i++)
{
mult.h1[i]=mult.bin[y];
y++;
System.out.println("//h1//"+"mult.h1["+i+"] "+mult.h1[i]);
}
System.out.println("nnnn");
y=0;
for(i=x-1;i<x-1+8;i++)
{
mult.h2[i]=mult.ord1[y];
System.out.println("//h2//"+"mult.h2["+(i)+"] "+mult.h2[i]+" ***"+i+"****"+y);
y++;
}
if(i!=14)
{
i=x+8;
while(i>=x )
{
if(mult.h1[i]==0 && mult.h2[i]==0)
{
if(b==1)
{
mult.h3[i]=1;
b=0;
i--;
}
else
{
mult.h3[i]=0;
i--;
}
}
else if(mult.h1[i]==1 && mult.h2[i]==1)
{
if(b==1)
{
mult.h3[i]=1;
b=1;
i--;
}
else
{
mult.h3[i]=0;
b=1;
i--;
}
}
else if(mult.h1[i]==1 && mult.h2[i]==0 || mult.h1[i]==0 && mult.h2[i]==1)
{
if(b==1)
{
mult.h3[i]=0;
b=1;
i--;
}
else
{
mult.h3[i]=1;
i--;
}
}
}
}
if(b==1)
{
i=x+8;
while(i>=x)
{
if(mult.h1[i]==0 && mult.h2[i]==0)
{
if(b==1)
{
mult.h3[i]=1;
b=0;
i--;
}
else
{
mult.h3[i]=0;
i--;
}
}
else if(mult.h1[i]==1 && mult.h2[i]==1)
{
if(b==1)
{
mult.h3[i]=1;
b=1;
i--;
}
else
{
mult.h3[i]=0;
b=1;
i--;
}
}
else if(mult.h1[i]==1 && mult.h2[i]==0 || mult.bin[i]==0 && mult.h2[i]==1)
{
if(b==1)
{
mult.h3[i]=0;
b=1;
i--;
}
else
{
mult.h3[i]=1;
i--;
}
}
}
}
x--;
System.out.println("wwww");
}
}

return mult;
}
public String obtenermultiplicacion()
{
System.out.print("el numero resultante es:");
for(int i=0;i<h3.length;i++)
System.out.print(h3[i]);
return "";
}
}
***************************************************************************
public class demosumbinario
{
public static void main(String args[])
{
sumbinario b1=new sumbinario (0,0,0,0,1,0,1,0);
sumbinario b2=new sumbinario (1,1,1,1,1,1,0,0);
System.out.println(b1.suma(b2).obtenerbinario()+" >>>>esto es la suma");
System.out.println(b1.suma(b2.resta(b2)).obtenerbinario()+" >>>>esto es la resta");
System.out.println(b1.multiplicacion(b2).obtenermultiplicacion()+" >>>>esto es la multiplicacion");
}
}
agradeciendo sus posteriores criticas me despido y les deseo exitos.............................

Rigel
12 de Octubre del 2004
HOLA:

Bueno según lo que veo es que tienes problemas en el método de la multiplicación, en si tu programa no está muy ordenado, a parte que hay que hacerle algunos ajustes a la optimización, puesto que por ahí puede que se vaya un valor,,, sin embargo el problema en si es a la hora de instanciar objetos, estás creando objetos sin ver en si como le llegan los argumentos, por ello tiene problemas el método de la multiplicación. No veo optimo el estar instanciando objetos en cada método.

Revisa tu código y trata de organizarlo un poco más.

Suerte