Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Libélula

Páginas: [1]
1
Sí, la verdad es que no tiene mucho sentido declarar de nuevo los atributos en la clase hija, cuando lo suyo es acceder a ellos a través de los métodos de la superclase, pero me pareció leer que el enunciado así lo pedía.
No obstante muchas gracias por molestarte en mirarlo y por tu ayuda.

2
O bien crear un constructor sin parámetros y luego al instanciar asignarle valores a los atributos a través de los setters.

3
Sin ánimo de ser pesado, y sólo para compartirlo con los demás por si a alguien le pasa lo mismo que a mí.
Creo que ya sé lo que ha podido pasar, a fuerza de muchas pruebas y errores y gracias a la entrega 92 que me estoy leyendo ahora, en la que veo que se puede invocar un método a la superclase que esté sobreescrito, lo cual me ha hecho caer en el detalle.
Es como si, al haber vuelto a declarar las variables matrícula y número de ruedas en la subclase, al hacer la llamada al constructor de Taxi con los 4 parámetros, los valores de matrícula y número de plazas se "machacaran", así que la solución pasaría por no declarar otra vez los atributos en la subclase, a los que sencillamente se puede acceder a través de sus métodos.

4
Tienes razón, ha sido un fallo tonto por mi parte, pero eso sólo me soluciona parte del problema.
Efectivamente al ejecutar ahora el objeto miVehiculo instanciado como Taxi, los atributos propios de la subclase Taxi (conductor y número de plazas) toman el valor introducido como parámetro, pero los atributos de la superclase Vehiculo (matrícula y número de ruedas) siguen apareciendo a 0 y null, respectivamente.
Estoy cambiando los nombres de los parámetros, hacer que coincidan en la superclase y subclase, en lugar de utilizar p delante del parámetro, utilizando this, pero nada de nada.
Ayuda, por favor. (Espero no haber cometido otro fallo estúpido).

5
Perdón, en el código de la clase test creo el objeto con tipo Taxi, cuando debería ser Vehiculo:
 
Código: [Seleccionar]
Vehiculo miVehiculo = new Taxi("9999ZZZ", 4, "Pedro Pérez Pérez", 5);
Pero vamos, que como he dicho, los resultados 0 y null son los mismos.

6
En primer lugar, gracias a Álex Rodríguez por aclararme la duda anterior.

Ahora me surge otra, con el ejercicio de referencia. El caso es que, efectivamente, en respuesta a la pregunta e), el método toString() que se aplica en la ejecución es el de la subclase, porque se corresponde con el tipo dinámico Taxi.

Sin embargo, yo he decidido que el constructor de Taxi tenga 4 parámetros, los dos de la superclase Vehículo referenciados con super (matrícula y número ruedas) y otros dos correspondientes a los atributos específicos de su clase (nombre conductor y número de plazas).
En la clase test, cuando creo un objeto de la clase Vehiculo instanciado como Taxi (o incluso un objeto de la clase Taxi directamente), e invoco al constructor de Taxi, meto lógicamente los 4 parámetros de su constructor, pero al ejecutar, los valores aparecen con 0 en tipo int y con null en String. En un principio he pensado que era por el hecho de que un objeto de tipo estático Vehiculo no podía contener a un objeto instanciado como Taxi en ejecución, pero si asigno el tipo estático Taxi me pasa lo mismo. ¿Por qué?

Adjunto mi código por si es de ayuda:

Código: [Seleccionar]
public class Vehiculo{
    private String matricula;
    private int numRuedas;
   
    public Vehiculo(String pMatricula, int pNumRuedas){
        matricula = pMatricula;
        numRuedas = pNumRuedas;
    }
   
    public void setMatricula(String pMatricula){
        matricula = pMatricula;}
    public void setNumRuedas(int pNumRuedas){
        numRuedas = pNumRuedas;}
    public String getMatricula(){
        return matricula;}
    public int getNumRuedas(){
        return numRuedas;}
    public String toString(){
        return ("El vehículo tiene la matrícula " + matricula + " y tiene " + numRuedas + " ruedas");}
}       

Código: [Seleccionar]
public class Taxi extends Vehiculo{
    private String matricula;
    private int numRuedas;
    private String nombreConductor;
    private int numPlazas;
   
    public Taxi(String matricula, int numRuedas, String pNombreConductor, int pNumPlazas){
        super(matricula, numRuedas);
        pNombreConductor = nombreConductor;
        pNumPlazas = numPlazas;
    }   
    public void setMatricula(String pMatricula){
        matricula = pMatricula;}
    public void setNumRuedas(int pNumRuedas){
        numRuedas = pNumRuedas;}
    public void setNombreConductor(String pNombreConductor){
        nombreConductor = pNombreConductor;}
    public void setNumPlazas(int pNumPlazas){
        numPlazas = pNumPlazas;}
    public String getMatricula(){
        return matricula;}
    public int getNumRuedas(){
        return numRuedas;}
    public String getNombreConductor(){
        return nombreConductor;}
    public int getNumPlazas(){
        return numPlazas;}
    public String toString(){
        return ("El taxi tiene la matrícula " + matricula + ", tiene " + numRuedas + " ruedas, su conductor se llama " + nombreConductor + ", y tiene " + numPlazas + " plazas.");}
}

Código: [Seleccionar]
public class TestInstanciaTaxi{
    public static void main (String[] args){
       Taxi miVehiculo = new Taxi("9999ZZZ", 4, "Pedro Pérez Pérez", 5);     
       System.out.println(miVehiculo.toString());
    }
}

7
Tienes toda la razón. Para comparar Strings no se utilizan los operadores lógicos, sino el método equals() o bien equalsIgnoreCase() (para obviar mayúsculas o minúsculas) de la clase String.
Muchas gracias por tu ayuda. Ahora el código hace exactamente lo que se pide.

8
Hola, soy yo otra vez. Ahora tengo otro problema. He modificado un poco el código para hacerlo más presentable, y todo va bien, excepto que siempre dice que la palabra no empieza con "a". Claramente el error está en el segundo if, pues no reconoce la condición de éste y se escriba la frase que se escriba siempre se cumple la condición del else.
Se supone que el método substring() devuelve un objeto String, así que yo pensaba que la condición  if (entradaTeclado.substring(0,1) == "a") sería correcta, pero parece que no es así. ¿Alguien me ayuda? Este es el código:
Código: [Seleccionar]
mport java.util.Scanner;

public class TestProgramaII{
   
   public static void main (String[] args){
       
        System.out.println("Introduce la cadena de caracteres: ");
        String entradaTeclado = "";
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
               
        if (entradaTeclado.length() < 5) {System.out.print("\"La cadena introducida tiene menos de 5 caracteres");}
        else if (entradaTeclado.length() > 15) {System.out.print("\"La cadena introducida tiene más de 15 caracteres");}
        else System.out.print("\"La cadena introducida tiene entre 5 y 15 caracteres");
       
        if (entradaTeclado.substring(0,1) == "a") {System.out.println(" y comienza por a\"");}
        else {System.out.println(" y no comienza por a\"");}
   }
}

9
Vale, jejejej. Ya sé qué ha pasado, en fin....
Bueno, para el que le pase lo mismo que a mi. Sencillamente el terminal está esperando que meta la palabra... sólo era eso, en fin... Si no se abre el terminal, la máquina estará esperando de por vida a que le metas la palabra que está pidiéndote. 

10
Hola, he realizado el ejercicio de la citada entrega, en el que se pide una clase con método main que pide entrada por el teclado y muestra mensaje utilizando condicionales y métodos length() y substring() de la clase String.

El caso es que el código compila, pero a la hora de ejecutar el método main la JVM se queda pensando y pensando... hasta que me canso de esperar y la reseteo, así que puede que algo de lo que he hecho esté mal.

A ver si alguien me puede decir dónde está el fallo. Este es el código:

Código: [Seleccionar]
import java.util.Scanner;

public class TestProgramaII{
   
    public static void main (String[] args){
       
        String entradaTeclado = "";
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
       
        if (entradaTeclado.length() < 5) {System.out.println("\"La cadena introducida tiene menos de 5 caracteres");}
        else if (entradaTeclado.length() > 15) {System.out.println("\"La cadena introducida tiene más de 15 caracteres");}
        else System.out.println("\"La cadena introducida tiene entre 5 y 15 caracteres");
       
        if (entradaTeclado.substring(0,1) == "a"){System.out.println(" y comienza por a\"");}
        else System.out.println(" y no comienza por a\"");
    }
}

11
Entendido, muchas gracias.

12
Hola a todos, soy nuevo en esto de programar, pero me está enganchando.
Una pregunta respecto a este ejercicio:

En la signatura del método en el que se pide obtener la duración del disco completo, ¿se podría introducir un parámetro duracionCancion? (Ya que para obtener la duración del disco completo necesitamos la duración de las canciones). Algo así:

public float obtenerDuracionDisco(float duracionCancion)

Muchas gracias.


Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".