Ir para o conteúdo
diogo.delgaudio

duvida newbie...

Mensagens Recomendadas

diogo.delgaudio    0
diogo.delgaudio

estou tentando fazer um cronometro em java, estou começando agora com java e estou tendo grande dificuldade em quebrar os paradigmas e assimilar a OO :wallbash:... enfim, montei duas classes... a classe Cronometro e a classe Crondados, que é a qual está com os métodos q tem de ser executados... acredito que hajam muitos erros, mas como sou principiante, não consigo listá-los para corrigi-los:

classe Crondados

package cronometro;

/**
*
* @author delgaudio
*/
public class Crondados {
    private int hora;
    private int minuto;
    private int segundo;
    private int i;
    
    /** Creates a new instance of crondados */
    public Crondados(int segundo, int minuto, int hora) {
        this.segundo=segundo;
        this.minuto=minuto;
        this.hora=hora;
        setHora(hora);
        setMinuto(minuto);
        setSegundo(segundo);
    }

    public int getHora() {
        return hora;
    }

    public void setHora(int hora) {
        this.hora = hora;
        if (minuto == 60){
            hora++;
            
        }
    }

    public int getMinuto() {
        return minuto;
    }

    public void setMinuto(int minuto) {
        this.minuto = minuto;
        if (segundo == 60){
            minuto++;
            setSegundo(00);
            
        }
    }

    public int getSegundo() {
        return segundo;
    }

    public void setSegundo(int segundo) {
        this.segundo = segundo;
        for (i=1; i<=60; i++){
            segundo++;
            setMinuto(minuto);
        }
    }
    
}

Cronometro

package cronometro;

/**
*
* @author delgaudio
*/
public class Cronometro  {
    private int hora;
    private int segundo;
    private int minuto;
   
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
      Crondados x = new Crondados(0,0,0);
      x.setSegundo(1);
      
      System.out.printf("%d : %d : %d" , x.getHora() , x.getMinuto()  , x.getSegundo());
    }
    
}

por favor, listem os erros! obrigado!  :P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

Este construtor...

    public Crondados(int segundo, int minuto, int hora) {
        this.segundo=segundo;
        this.minuto=minuto;
        this.hora=hora;
        setHora(hora);
        setMinuto(minuto);
        setSegundo(segundo);
    }

Porque é que estás a atribuir duas vezes o mesmo valor às variáveis? É muito boa política usares os métodos de encapsulamento para atribuires os valores mas neste caso estás a atribuir duas vezes o mesmo valor.

Já agora, nos métodos de set, devias estar a validar os valores passados, por exemplo, da forma como está feito, posso dizer que quero um minuto negativo.

De resto, o exemplo é bastante simples, não necessitavas dos dois objectos, mas não há mal em criares os dois, o encapsulamento existe, embora os métodos devessem estar a fazer validações. Em resumo, bom começo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

É muito boa política usares os métodos de encapsulamento para atribuires os valores...

Uma citação interessante, visto que me leva a um problema que acontece em C++, e gostava de saber se o mesmo acontece em Java.

Em C++ é necessário ter especial cuidado ao usar funções virtuais no construtor. Como descrito aqui: http://www.artima.com/cppsource/nevercall.html

Sei que em Java não existe distinção, são todas virtuais por defeito. Será que o comportamento é o mesmo? Estou a tentar pesquisar isto sem grandes respostas.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diogo.delgaudio    0
diogo.delgaudio

entendi, obrigado pelas respostas! alguém pode me mostrar como ficaria corrigido o meu exemplo? :P obrigado, galera!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

Bem, esse será um problema de polimorfismo e, pelo que sei, no java esse problema não se coloca, no entanto, não tenho bibliografia que apoie o que estou a dizer. Terei de confirmar, mas penso que estou correcto ao afirmar que não terás esse problema. Entretanto verfico isso.

Quanto a um exemplo corrigido, ao fim do dia, se não te importares de esperar

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

package org.sergiolopes.dd.cronometro;

/**
*
* @author Knitter
*/
public class Crondados {
    
    private int hora;
    private int minuto;
    private int segundo;
    
    public Crondados(int segundo, int minuto, int hora) {
        setHora(hora);
        setMinuto(minuto);
        setSegundo(segundo);
    }

    /* Construtor por omissao, apenas por conveniencia */
    public Crondados() {
        this(0, 0, 0);
    }

    public int getHora() {
        return hora;
    }

    public void setHora(int hora) {
        if(hora >= 0 && hora < 60) {
            this.hora = hora;

            if (minuto == 60) {
                this.hora++;            
            }
        }
    }
    
    public int getMinuto() {
        return minuto;
    }

    public void setMinuto(int minuto) {
        if(minuto >= 0 && minuto < 60) {
            this.minuto = minuto;

            if (segundo == 60) {
                this.minuto++;
                segundo = 0;           
            }
        }
    }

    public int getSegundo() {
        return segundo;
    }

    public void setSegundo(int segundo) {
        if(segundo >=0 && segundo < 60) {        
            this.segundo = segundo;
            /* Nao faco ideia porque estavas a aumentar os segundos 
                e a mudar o minuto */
        }
    }

    /* Faz mais sentido ter um metodo que inicie o relogio que fazer um 
        set aos seus segundos. Na pratica o resultado, e ate o codigo, sao os mesmos
        e' apenas uma correccao logica */
    public void iniciar() {
        segundos = 1;
    }

    public static void main(String[] args) {
        Crondados cron = new Crondados();
        cron.iniciar();

        System.out.println("Hora: " + cron.getHora() + ", Minuto: " + cron.getMinuto() + ", Segundo: " + cron.getSegundo());
    }
}

Repara que este exemplo é demasiado simplista e não representa correctamente um relógio, nem funcionará como tal se o tentares usar num programa com esse objectivo. É apenas um exemplo simples de como fazer uma classe.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diogo.delgaudio    0
diogo.delgaudio

obrigado, knitter! :D

eu estava aumentando os segundos pra fazer com que chegasse a 1 minuto e assim repetisse novamente...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade