AYUDA CON PROGRAMA EN JAVA

Iniciado por RADIACTIVO, 15 Octubre 2012, 20:02 PM

0 Miembros y 1 Visitante están viendo este tema.

RADIACTIVO

Buenas, soy estudiante de ing. informática y estoy creando un programa que reciba un numero por teclado, y lo transforme a binario y posteriormente a complento a2.
El caso es que, tengo que hacer 2 metodos y devolverlo como String. Hago el paso del integer a binario a traves de un array, pero no se como hacer para que en el main me printee el string  :huh:. Por favor cualquier ayuda será bien recibida, os dejo a continuación el código fuente. Saludos y gracias!


import java.util.*;

public class integerNumber{



public static void main(String[]args){

Scanner sc = new Scanner(System.in);

System.out.println("Tell me, which number do you want to convert?");

int integerNumber=sc.nextInt();

System.out.println(intToComp2(integerNumber)); //NO ME PRINTEA EL STRING!
}


//METODO QUE PASA DE INTEGER A Comp.A2

public static String intToComp2(int integerNumber){

int i=0;
int[]array;
int j=integerNumber;
int r;
int m=0;
String returneado;

//este bucle calcula la longitud del array
do{
i++;
array=new int[i];

}while((Math.pow(2,i))<=integerNumber);

System.out.println("So I will use " + array.length + " bits");

//este bucle mete en el array el valor del numero en binario
do{
r=j%2;
j=j/2;
array[m]=r;
if(j/2==1){
array[i-1]=1;
}
m++;
}while(j>1);

//esto printea el binario

for(int h=m;h>=0;h--){
System.out.print(array[h]);
}

//este bucle lo pasa a comp.A2

for(int b=0;b<array.length;b++){
if(array[b]==1){
b=b+1;
while(b<array.length){
if(array[b]==1){
array[b]=0;
}else{
array[b]=1;
}
b++;
}

}break;
}


System.out.println();

returneado = array.toString(); //Esto lo pongo para poder convertir el array en string

return returneado;
}
}

La ignorancia es la noche de la mente, solo que sin estrellas ni luna que alumbre.

Gallu

Hola , el problema estaba en esta línea
Código (java) [Seleccionar]

returneado = array.toString(); //Esto lo pongo para poder convertir el array en string

al llamar al método toString de un objeto(un array también es un objeto) sin sobreescribirlo, lo que te devuelve el nombre de la clase y el hashcode del objeto , más info http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#toString%28%29(busca toString).

Otra cosa , por convención el nombre de las clases deben empezar con mayúsculas , intenta utilizar también nombres de variables un poco más descriptivas. Aquí va tu clase retocada:
Código (java) [Seleccionar]

import java.util.*;

public class IntegerNumber{



public static void main(String[]args){

Scanner sc = new Scanner(System.in);

System.out.println("Tell me, which number do you want to convert?");

int integerNumber=sc.nextInt();

System.out.println("\n" + intToComp2(integerNumber)  + " -- salida"); //NO ME PRINTEA EL STRING!
}


//METODO QUE PASA DE INTEGER A Comp.A2

public static String intToComp2(int integerNumber){

int i=0;
int[]array;
int j=integerNumber;
int r;
int m=0;
                 
                //fíjate en como redefiní esta variable, y en como la uso al final del método
StringBuffer returneado = new StringBuffer();

//este bucle calcula la longitud del array
do{
i++;
array=new int[i];

}while((Math.pow(2,i))<=integerNumber);

System.out.println("So I will use " + array.length + " bits");

//este bucle mete en el array el valor del numero en binario
do{
r=j%2;
j=j/2;
array[m]=r;
if(j/2==1){
array[i-1]=1;
}
m++;
}while(j>1);

//esto printea el binario

for(int h=m;h>=0;h--){
System.out.print(array[h]);
}

//este bucle lo pasa a comp.A2

for(int b=0;b<array.length;b++){
if(array[b]==1){
b=b+1;
while(b<array.length){
if(array[b]==1){
array[b]=0;
}else{
array[b]=1;
}
b++;
}

}break;
}


for(int z = 0 ; z < array.length ; z++){
returneado.append(array[z]);
}

return returneado.toString();
}
}
Saludos

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.

RADIACTIVO

Muchísimas gracias! ;-) Has sido de gran ayuda. La verdad es que no conocia el metodo de "StringBuffer". Intentaré ser mas preciso con los detalles de poner las variables mas reconocibles y poner  en mayúscula la primera letra del nombre de la clase. Tras mirar el link que me has pasado, me ha surgido una duda mas, el hascode del objeto, ¿lo podría considerar (mas o menos) la direccion de memoria donde empieza ese String? Saludos y gracias!  ;D
La ignorancia es la noche de la mente, solo que sin estrellas ni luna que alumbre.

Gallu

Hola , me alegro que te haya servido, unas cuantas aclaraciones :
1.- StringBuffer no es un método , es una clase , úsala siempre que necesites ir agregando a un String dentro de un bucle , es preferible por cuestiones de  optimización (también existe la clase StringBuilder).

2.- El retorno del método hashcode no tiene nada que ver con la dirección de memoria del objeto, y no es un método exclusivo de la clase String, TODOS los objetos lo tienen, ya que la implementación de hashcode esta en la clase Object , superclase de TODAS las clases java . mas info http://en.wikipedia.org/wiki/Java_hashCode%28%29

3.- Si te interesa el cómo debes estructurar tu código, igual querrías echarle un ojo a las java code conventions http://www.google.es/url?sa=t&rct=j&q=java%20code%20conventions%20en%20espa%C3%B1ol&source=web&cd=1&sqi=2&ved=0CCIQFjAA&url=http%3A%2F%2Fwww.um.es%2Fdocencia%2Fvjimenez%2Fficheros%2Fpracticas%2FConvencionesCodigoJava.pdf&ei=QBx_UMavHMql0QXWw4HYCA&usg=AFQjCNEN8JVPMCpY64H-MD1Dz7GVLUq-Ew&cad=rja.

Espero haber resolvido en parte tus dudas .

Saludos
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.

RADIACTIVO

Muy amable por todo, si me surge algo mas ya te avisaré!
Saludos!
La ignorancia es la noche de la mente, solo que sin estrellas ni luna que alumbre.