Implementação do método

estou com dificuldades em implementar o método AvanceUmSegundo, a sua descrição é a seguinte:
• avance um segundo na hora que o relógio marcar. você deve ter em mente que um segundo avanço pode implicar um alteração nas horas, nos minutos e uma alteração no que se refere ao antes do meio-dia (am) e passado o meio-dia (pm)

os atributos da classe Relógio são todos privados:
• int horas
• int minutos
• int segundos
• bool pm

public void avanceUmSegundo() {
    segundos++;
    // o resto é com você
}
1 curtida

desse jeito o método estaria incompleto, pois a descrição diz que: um avanço nos segundos afetaria as horas, minutos e o am e o pm

Dá uma lida nesse post aqui.

Por isso que tem o comentário no código dizendo “o resto é com você” é só você implementar o restante da lógica.

  • Após qual segundo o minuto avança?
  • Após qual minuto a hora avança?
  • Após qual hora o pm é true?

imagem

assim está correto @staroski?

Não posta imagens, não dá pra copiar e compilar imagens.

Posta o código e formata ele com o botão </>

Testa seu relógio ué?

Exemplo de programa para testar:

public class Programa {

    public static void main(String[] args) {
        try {
            Programa programa = new Programa();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public void executar() throws Exception {
        Relogio relogio = new Relogio();
        for (int i = 0; i <= 86400; i++) {
            System.out.println(relogio);
            relogio.avanceUmSegundo();
        }
    }
}

ajudou bastante, obrigado🙏

Existem N formas de implementar, podes fazer assim:

public class Relogio {

    private int horas;
    private int minutos;
    private int segundos;
    private boolean pm;

    public void avanceUmSegundo() {
        segundos++;
        if (segundos == 60) {
            segundos = 0;
            minutos++;
        }
        if (minutos == 60) {
            minutos = 0;
            horas++;
        }
        if (horas == 12) {
            horas = 0;
            pm = !pm;
        }
    }


    @Override
    public String toString() {
        return String.format("%02d:%02d:%02d %s", horas, minutos, segundos, pm ? "PM" : "AM");
    }
}

Ou assim:

public class Relogio {

    private int horas;
    private int minutos;
    private int segundos;
    private boolean pm;

    public void avanceUmSegundo() {
        if ((segundos = (segundos + 60 + 1) % 60) == 0) {
            if ((minutos = (minutos + 60 + 1) % 60) == 0) {
                if ((horas = (horas + 12 + 1) % 12) == 0) {
                    pm = !pm;
                }
            }
        }
    }

    @Override
    public String toString() {
        return String.format("%02d:%02d:%02d %s", horas, minutos, segundos, pm ? "PM" : "AM");
    }
}

Faça como sua criatividade mandar.

1 curtida