Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Constructor: Con Parámetros Directos Y Por Medio De Variables

Java JDK 7.0 / Eclipse / NetBeans

Hola a todos

Se tiene la Clase Libro que tiene un Constructor que tiene un parámetro que recibe el tipo de Tapa que tiene para calcular el Precio del mismo. Si el dato es "Tapa Dura" se incrementa 25 pesos al Precio Base y si es "Tapa Blanda", el Precio De Venta es igual al Precio Base.

La instanciación del Objeto Libro sería:

Libro unLibro = new Libro("Tapa Dura");

Funciona correctamente.

Pero si en lugar de pasar el Argumento directamente ("Tapa Dura"), se solicita por la Consola de Java el Tipo y se le asigna a una Variable de tipo String como por ejemplo TipoTapa, según el siguiente Código:

...
System.out.println("Tipo De Tapa: ");
TipoTapa = s.nextLine();

y luego se utiliza la Variable TipoTapa en el Constructor de la Clase Libro, de este modo:

Libro unLibro = new Libro(TipoTapa);

No se reconoce o no parece reconocerse la entrada almacenada en la Variable TipoTapa, pues si el valor que almacena fuese "Tapa Dura" no hace el incremento de 25 pesos, al Precio Base mostrando el mismo valor en el Precio De Venta.

¿Cuál es el error? y ¿Cómo corregirlo?

Desde ya Muchísimas Gracias

julio 17, 2014 | Unregistered CommenterSkar.2007

Te has tomado muchas molestias para explicarte, sin embargo, no publicas las clases a las que te refieres, por lo que solo se pueden hacer suposiciones.
¿Cómo están declaradas esas Tipo y TipoTapa?,

"... No se reconoce o no parece reconocerse..." ¿Qué significa esa frase, que se lanzan excepciones, o que el valor no es el esperado?

julio 17, 2014 | Registered Commenterchoces

Gracias choces

Pero...

1º Creo que al colocar la instrucción siguiente:

Libro unLibro = new Libro("Tapa Dura");

queda claro que el Parámetro del Constructor es de tipo String (más aún si se indica que de esa forma funciona bien) ....

2º Al incluir "esta" explicación

... pues si el valor que almacena fuese "Tapa Dura" no hace el incremento de 25 pesos, al Precio Base mostrando el mismo valor en el Precio De Venta.

se entiende que no se muestra ninguna Excepción, sino que el resultado no es el esperado.

Es por ello que presento "estas explicaciones"

Si alguién puede indicar donde están los errores y cómo corregirlos, sería genial

Desde ya Muchísimas Gracias

julio 17, 2014 | Unregistered CommenterSkar.2007

Saludos cordiales
Bueno lo que dice choces, tiene mucho sentido, no sabemos como esta tu codigo. Sin embargo trate de reproducir lo que explicas y si funciona. abajo esta el codigo solo una cosa tiene que tener cuidado de que al momento de ingresar el valor por teclado sea exactamente igual "Tapa Dura" así con mayusculas y minusculas de lo contrario no son iguales o podrias usar el metodo equalsIgnoreCase(). para evitarte el problema de ingresar en mayusculas y minisculas.. Aqui el coidigo:
public class Libro {

private Double precioBase=10D;

public Libro(String tipoTapa) {
if (tipoTapa.equals(tipoTapa)){
precioBase+=25;
}
System.out.println("PRECIO BASE="+precioBase);
}

public static void main (String args[]){
System.out.println("Tipo De Tapa: ");
Scanner s = new Scanner(System.in);
String tipoTapa = s.nextLine();
Libro libro = new Libro(tipoTapa);
}



}

julio 17, 2014 | Unregistered CommenterDavid

Mira Skar, las únicas explicaciones válidas, cuando un código no funciona, las proporciona el mismo código, con comentarios intercalados si es necesario.
No tengo que ponerme a "imaginar" o "deducir" lo que hace o debe hacer tu código, basándome en "explicaciones".
Hablas de tipos, y en Java un tipo es o un interface o una clase.
Si no publicas tu código completo, de forma que sea compilable y ejecutable, las "ayudas" se basarán en meras especulaciones.

julio 17, 2014 | Registered Commenterchoces

Guenas.

Así por encima, mirando solo el constructor de la clase Libro ya se observa un error.

Esta condición:
if (tipoTapa.equals(tipoTapa)) {
...
}
siempre sera cierta, sea lo que sea tipoTapa

Un saludo

julio 17, 2014 | Unregistered CommenterPaposo

Guenas.

Perdon.

Si tipoTapa es null no sera cierta. Directamente petará :)

Salut

julio 17, 2014 | Unregistered CommenterPaposo

Perdon la comparacion es:

if (tipoTapa.equals("Tapa Dura")) {
....
}

julio 17, 2014 | Unregistered CommenterDavid

@David

Es mejor comparar así: if("Tapa Dura".equals(tipoTapa)
porque si tipoTapa es null el resultado es false, mientras que comparado como antes, se lanzará una excepción en runtime del tipo NullPointerException

julio 17, 2014 | Registered Commenterchoces

Es verdad, mi codigo tiene error, gracias @choces.
De la manera que planteas no se produce la Excepcion. NullPoiterExcepcion

julio 17, 2014 | Unregistered CommenterDavid