2

Soy nuevo en en mundo de la POO y tengo algunas dudas. El profesor nos puso a realizar un programa donde digitemos los nombres de los competidores así como su respectivo tiempo de salida y tiempo de llegada. Al final teníamos que sacar la diferencia de horas, minutos y segundos.

Yo realice ese programa de un modo más laborioso y complicado y el profesor nos dijo hoy que podíamos utilizar clases que ya teníamos hechas para poder realizar el programa. Lo que no entiendo es en si algunas cosas

¿A Que se refiere con public Hora salida, llegada? Tengo una clase Hora con su debido constructor, pero lo de salida y llegada no entiendo totalmente por que se pone así.

public class Corredores {
    private String nombre;
    public Hora salida, llegada;

    public Corredores(String nombre) {
      this.nombre = nombre;
    }

    public String toString() {
    return "La persona: " +nombre +" salio a las " +salida +" y llego a las " +llegada +
            " en su prueba de atletismo";
    }
}

Esta es mi clase Hora(tiene métodos getters y setter pero los omití)

public class Hora {
   private int hr;
   private int min;
   private int seg;

   public Hora(int hr, int min, int seg) {
      this.hr = hr;
      this.min = min;
      this.seg = seg;
   }

En mi clase donde se encuentra el método main tengo lo sig.

for(int i=0; i<corredor.length; i++) {
    System.out.println("Introduzca el nombre del competidor");
    nombre = entrada.nextLine();
    System.out.println("Introduzca la hora de salida");
    horaS = entrada.nextInt();
    System.out.println("Introduzca los minutos de salida");
    minutoS = entrada.nextInt();
    System.out.println("Introduzca los segundos de salida");
    segundoS = entrada.nextInt();

    System.out.println("Introduzca la hora de llegada");
    horaL = entrada.nextInt();
    System.out.println("Introduzca los minutos de llegada");
    minutoL = entrada.nextInt();
    System.out.println("Introduzca los segundos de llegada");
    segundoL = entrada.nextInt();

    corredor[i]= new Corredores(nombre); //Por que se debe poner esto??
    corredor[i].salida = new Hora(horaS,minutoS,segundoS);
    corredor[i].llegada = new Hora(horaL, minutoL, segundoL);

    entrada.nextLine(); 
}

Lo que esta comentado es la parte que no entiendo y por ultimo. ¿ Como puedo realizar que se haga la resta del tiempo inicial con el final Pues prácticamente son de tipo Hora y esta en constructores y no hallo la forma de hacerlo.

Por el momento puedo registrar nombres, hora de salida y final solo me falta sacar la diferencia

Actualmente estoy leyendo el libro de Deitel Deitel para poder darme ideas, pero aun se me hacen muy confusos estos conceptos

Dev. Joel
  • 23,229
  • 3
  • 25
  • 44

3 Answers3

3

En mi opinión el nombre de la clase no es tan apropiado y puede llevar a confusión ya que representa la clase en Sí y además contiene otro atributo hora dentro de ella.

Quizá podría tomar otro nombre y se entendería mejor como Momento quizá , (cuidado con Time que es una clase ya existente en Java)

¿A Que se refiere con public Hora salida, llegada?

Básicamente son dos atributos de tipo clase Hora que internamente poseerán los atributos de hr,min,seg para determinar en que instante de tiempo salió y llegó el corredor. Aunque son publicas_(public)_ accesibles desde otra clase deberían ser privadas y acceder o asignar haciendo uso de getter y setters.

corredor[i]= new Corredores(nombre); Por qué se debe poner esto?

Para instanciar el Objeto .Sí la línea se omitiera el elemento del arreglo corredor sería null con posibilidad de obtener un nullPointerException como se explicó en una pregunta realizada anteriormente

¿ Como puedo realizar que se haga la resta del tiempo inicial con el final

Después de instanciar el Objeto corredor y sus respectivos atributos salida y llegada simplemente podría restar de la siguiente forma. (asumiendo nombres de sus getters y setters)

corredor[i]= new Corredores(nombre); //Por que se debe poner esto??
corredor[i].salida = new Hora(horaS,minutoS,segundoS);
corredor[i].llegada = new Hora(horaL, minutoL, segundoL);

System.out.println("Diferencia en Horas " + 
         corredor[i].llegada.getHora() -corredor[i].salida.getHora());
System.out.println("Diferencia en Minutos" + 
         corredor[i].llegada.getMinuto() -corredor[i].salida.getMinuto());
System.out.println("Diferencia en Segundos" + 
         corredor[i].llegada.getSegundo() -corredor[i].salida.getSegundo());
Dev. Joel
  • 23,229
  • 3
  • 25
  • 44
0

public (público): es accesible desde otra clase. private (privado): no es accesible desde otra clase.

Por ejemplo en:

    public class Hora {
        private int hr;
        private int min;
        private int seg;
        public Hora(int hr, int min, int seg) {
            this.hr = hr;
            this.min = min; this.seg = seg;
   }

Ahí tienes variables declaradas como private lo que significa que desde otra clase no podrás acceder a ellas pero, tienes un constructor público lo cual significa que puedes utilizar o acceder a el desde otra clase, por ejemplo desde:

    public clases Corredores {}

Espero me dejé entender y que no aya sido tan redundante, saludos.

Anthony
  • 137
  • 11
0

Lo primero que comentas public Hora salida, llegada; simplemente está creando 2 objetos de tipo Hora. Uno llamado salida que contendrá los datos de la salida. Y otro llamado llegada que contendrá los datos de la llegada. Esto lo hace porque cada corredor tiene que contener ambos registros en tu ejercicio.

En cuanto a la línea corredor[i]= new Corredores(nombre); la utiliza para crear el corredor.

Flowen
  • 2,147
  • 8
  • 13