Autor Tema: Atascado en dos constructores....... con y sin argumentos java  (Leído 8981 veces)

lestatmail

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Hola, lo primero muchas gracias por el foro, ya que me esta ayudando en mi tarea de aprender java... Aun estoy empezando, pero me encanta, me paso horas escribiendo codigo y la verdad que soy feliz, jeje...... Pero ahora estoy atascado con el problema de los dichosos constructores... Estoy haciendo ejercicios y tengo que hacer uno donde me piden dos constructores, uno con argumentos y el otro sin argumentos, hasta ahi ningun problema, pero ahora viene donde no se como hacerlo.. Tengo que crear otra clase y crear dos objetos, uno con el constructor con argumentos y otro con el constructor sin argumentos... Y por mas que le doy vueltas, no se como diablos hacerlo con el constructor sin argumentos... Alguien podria apuntarme algo... Muchas gracias de antemano... Un saludo a todos..
« Última modificación: 13 de Septiembre 2014, 18:56 por Alex Rodríguez »

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Atascado en dos constructores.......
« Respuesta #1 en: 05 de Agosto 2014, 12:25 »
Para instanciar un objeto con un constructor por defecto( es decir sin parámetros ), es tan fácil como:

Código: [Seleccionar]
NombreClase nombreVariable=new NombreClase();

Así crearíamos un objeto con el constructor por defecto, es exactamente igual que si tuviera parámetros con la diferencia que tras el operador new, no hay ningún parámetro entre los paréntesis.

En cambio al crear un objeto con un constructor que si tiene parámetros, se haría como sigue :   

Código: [Seleccionar]
NombreClase nombreVariable=new NombreClase(param1, ... , paramN);

y puedes crear tantos objetos como quieras, por ejemplo si haces:

Código: [Seleccionar]
NombreClase objeto1=new NombreClase();
NombreClase objeto2=new NombreClase();
NombreClase objeto3=new NombreClase();

Estarías creando 3 objetos con el constructor por defecto.

Bueno espero haberte aclarado un poco mas las ideas.

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2661
    • Ver Perfil
Re:Atascado en dos constructores.......
« Respuesta #2 en: 05 de Agosto 2014, 12:30 »
Hola, si estás siguiendo el curso "Aprender programación Java desde cero" en el título del tema indica siempre la referencia, por ejemplo CU00654B, de esta manera se puede localizar fácilmente de qué se trata.

También cuando escribas una consulta escribe el código hasta donde hayas podido llegar, por ejemplo en este caso escribe todo el código, si es con un constructor y no sabes cómo crear el otro señala hasta dónde has llegado y dónde no puedes seguir avanzando o dónde obtienes el error. Para pegar código pulsa el botón # del foro y escribe el código entre las etiquetas [ code ] ... [ / code].

A partir del código y la descripción del problema trataremos de ayudarte, pero es importante que incluyas todo el código posible, así nos facilitas a las personas que respondemos en los foros el poder ayudar.

Saludos!

lestatmail

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Atascado en dos constructores.......
« Respuesta #3 en: 08 de Agosto 2014, 16:05 »
Bueno, lo primero muchas gracias chicos... A ver si me explico bien... Teneis que perdonarme ya que soy muy novato y aun hay cosas que me parecen dificiles.
 el ejercicio en cuestion es crear dos clases: Coches y TestCoches.
En la clase Coches, poner sus atributos: color, modelo, ect..... poner dos constructores , uno con parametros, y el otro sin parametros, y despues crear un metodo para cada atributo...... (hasta aqui no tengo ningun problema)... Ahora viene donde no soy capaz de seguir, jeje....

Clase TestCoche, crear dos objetos , uno con el constructor con parametros, y otro con el constructor sin parametros, pero en los dos objetos, los datos deben pedirse por teclado... Y ahi esta mi problema.. Se crear perfectamente un objeto (coche) con el constructor sin parametros y que pidan los atributos por teclado, pero en el otro objeto no tengo idea, ahi mi duda.. Os dejo el codigo de lo que tengo hasta ahora para que veais. Seguramente se puede hacer con menos codigo y mas facil, pero es lo mejor que se ahora mismo, jejeee... Gracias por todo chicos...



Clase Coche:

Código: [Seleccionar]
public class Coches {
           
         private String marca, modelo, color;
         private Scanner tec;
         
             public Coches(){
        tec=new Scanner(System.in);
                 }

    public Coches(String marca, String modelo, String color) {
        this();
        this.marca = marca;
        this.modelo = modelo;
        this.color = color;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
        System.out.println("De que marca es su coche");
        this.marca=tec.nextLine();
       
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
        System.out.println("De que modelo es su coche");
        this.modelo=tec.nextLine();
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
        System.out.println("De que color es su coche");
        this.color=tec.nextLine();
    }
   

    @Override
    public String toString() {
        return "Coches{" + "marca=" + marca + ", modelo=" + modelo + ", color=" + color + '}';
    }
 


Clase TestCoche:

Código: [Seleccionar]
public class TestCoches {
   
      public static void main(String[] args) {
       
          Coches coche1=new Coches();
          coche1.setMarca(null);
         

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Atascado en dos constructores.......
« Respuesta #4 en: 08 de Agosto 2014, 17:59 »
A ver te doy mi primera impresión, para que intentes arreglarlo.

Has mezclado el primer apartado del ejercicio con el segundo, si te fijas el primer apartado dice(palabras tuyas):

Citar
En la clase Coches, poner sus atributos: color, modelo, etc..... poner dos constructores , uno con parámetros, y el otro sin parámetros, y después crear un método para cada atributo.

Nota: Deberías hacernos una referencia mas directa al ejercicio. Por ejemplo  ejercicio CU00654B.

En fin, lo que te comentaba, en el primer ejercicio se dice crear una clase coche, pero no se dice nada de entrada de teclado ni nada, con lo cual, en la clase Coche no debería haber ninguna referencia a la clase Scanner.

En cambio en la clase TestCoche, es donde te dicen que deberías coger los datos por teclado, luego aquí es donde deberías realizar todo lo que tenga que ver con solicitar datos al usuario y no en la clase coche como lo estas haciendo.

Te recomendaría que intentaras realizar esta separación hasta donde seas capaz, y una vez echo, seguimos para adelante.

A ver te explico mas o menos el porque de esto.

Cuando creamos una clase(llámese también objeto), lo que estamos haciendo es modelando algún objeto(coche, casa, persona,...). Normalmente solo tendrá todo lo que sea relativo a ese objeto que estamos modelando. Una vez que tenemos el modelo, podremos usar ese modelo para realizar cosas con él.

En tu caso el modelo lo has creado mas o menos bien, el problema viene en los métodos set, normalmente estos métodos, a menos que te digan lo contrario, solo modificaran el valor de la variable para el cual se ha creado. Por ejemplo:

si tenemos el atributo "nombre" en una clase, esa clase tendrá un método "setNombre( String param)" pues bien, ese método, como te comento por norma general solo modificara el valor del atributo nombre, por lo que su implementación solo sería:

Código: [Seleccionar]
public void setNombre(String param){
      nombre=param;
}

Por lo tanto creo que deberías intentar eso crear el modelo pero sin hacer uso de objetos scanner, ya que eso se hará en la clase TestCoches.

Bueno y una vez que hayas quitado los scanners de la clase coche, te vas a la clase TestCoches y creas las variables que te hacen falta para poder crear un objeto coche, en tu caso serian:    String marca, modelo, color;

Cuando crees esas tres variables en el método main de la clase TestCoches, entonces, es hora de crear un objeto Scanner y con él, rellenar esas variables, una vez que tienes las variables rellenas, podrás crear un objeto coche con el constructor con parámetros con esas variables ya iniciadas. Si llegas hasta aquí, ya habrías mejorado bastante.

Intenta hacer esto y cuando lo tengas te hablo un poco sobre el constructor sin parámetros.

Si no entiendes algo, no dude en preguntar. Un saludo!

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2661
    • Ver Perfil
Re:Atascado en dos constructores.......
« Respuesta #5 en: 08 de Agosto 2014, 18:10 »
Creo que con la explicación de dongo tienes bastante por donde jalar, pero te pongo algo complementario a ver si te sirve. A primera vista diría que te faltan conceptos básicos por lo que te recomendaría repasarlos volviendo atrás en el curso java desde cero: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

El código que propones no lo veo del todo bien: con tu código en el constructor sin atributos de la clase Coches tenemos esto:

            public Coches(){
        tec=new Scanner(System.in);
                 }

Lo que tendrías que plantearte es: ¿es esta la misión de un constructor? ¿no sería más lógico que la clase Coche tenga las responsabilidades de un coche y que otra clase (como EntradaDeTeclado) se encargue de tener las responsabilidades sobre una entrada de teclado?

Es lo que te ha comentado dongo antes: "en la clase Coche no debería haber ninguna referencia a la clase Scanner..."

Otro problema está en el nombre de la clase, sería mejor Coche que Coches.

Puedes crear un objeto Coches con el segundo constructor usando este código:

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

public class TestCoches {
    public static void main(String[] args) {
        String marca, modelo, color;
        Coches coche1=new Coches();
        coche1.setMarca(null);
        Scanner entradaTeclado=new Scanner(System.in);
        System.out.print("Introduzca la marca del coche: ");
        marca = entradaTeclado.nextLine();
        System.out.print("Introduzca el modelo del coche: ");
        modelo = entradaTeclado.nextLine();
        System.out.print("Introduzca el color del coche: ");
        color = entradaTeclado.nextLine();
        Coches coche2 = new Coches(marca, modelo, color);
        System.out.print("Se ha creado un objeto coche ");
    }
}

Pero esto no sería un buen diseño, como te digo te recomiendo que empieces con los conceptos básicos y los ejercicios más básicos, ya que si no avanzar se te hará más difícil. Si ya has realizado ejercicios anteriores del curso pero no has consultado es posible que los hayas hecho mal, no lo sé, lo que parece es que los conceptos no están claros.

Salu2

lestatmail

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Atascado en dos constructores.......
« Respuesta #6 en: 11 de Agosto 2014, 12:43 »
Hola de nuevo chicos... Despues de leer vuestros mensajes me he quedado de piedra, ya que no tenia ni idea que hubiese un curso de java aqui mismo...
Encontre el foro buscando informacion en google, pero no tenia ni idea de que habia un curso.. El ejercicio que estaba haciendo no tiene nada que ver con este curso.. Pero le voy echar un ojo al curso de este foro, y a ver si aprendo algo, xd.... Muchas gracias.

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Atascado en dos constructores.......
« Respuesta #7 en: 11 de Agosto 2014, 13:40 »
Bien, bien, pues te recomiendo repases las primeras lecciones del curso de esta web que esta bastante bien estructurado y con explicaciones sencillas y claras.

Te invito a que realices los ejercicios que en este curso se encuentren y nos vayas posteando las soluciones para poder darte indicaciones y resolver dudas.

También puedes apuntarte a un curso tutorizado con el cual tendras un tutor asignado que te guiará y ayudará.

https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=64&Itemid=87

Aun así, decidas lo que decidas, estaremos por aquí por el foro para poder ayudarte, un saludo!

 

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".