繁体   English   中英

如何正确实现计时器?

[英]How to implement a timer correctly?

确定,我有这种方法来减少我的类计时器中的属性int sec(seconds)

private void decreaseSec(){

       if(sec <59  && sec > 0 ){
       sec--;}
       else if(sec == 0 && min == 0){
           sec = 0;
       }
       else if(sec == 0 && min > 0){
          sec = 59; 
          decreaseMin();
       }

   }

根据我的逻辑,正确地减少秒数是正确的。 但是当它达到0时,开始计数到负数(-1,-2,-3 ...),我不明白! 也许有人可以帮助我,或者提供一种更好的方法。 谢谢!

尝试这个。 您可能会跳过零进入负面领域,而永远不会抓住它。

private void decreaseSec(){

    if(sec > 0){
        sec--;
    }else if(sec <= 0 && min <= 0){
        sec = 0;
    }else if(sec <= 0 && min > 0){
       sec = 59; 
       decreaseMin();
    }

}
package Reloj;

import java.util.Scanner;

/**
 *
 * @author MarcoAntonio
 */
public class Temporizador {

     //Metodo estatico de mi aplicacion de AppLibreria
    public static void limpiaPantalla(){
        //Limpiando la pantalla
            for(int i = 0; i<25 ; i++){
                System.out.println();
            }    }

    private int hr;
   private int min;
   private int seg;


   public Temporizador (){

       hr  = min = seg = 0;

   }

   public Temporizador(int h, int m, int s){

       this();
       hr  = h;
       min = m;
       seg = s;

   }

    public void setHr(int hr) {
        this.hr = hr;
    }

    public void setMin(int min) {
        this.min = min;
    }

    public void setSeg(int seg) {
        this.seg = seg;
    }

    public int getHr() {
        return hr;
    }

    public int getMin() {
        return min;
    }

    public int getSeg() {
        return seg;
    } 

   public void decrementa(){
       if(hr == 0){
           if(min == 0 && seg != 0){
                  seg--;  
           }
           if(min != 0 && seg == 0){
               min--;
               seg = 59;
           }
           if(min != 0  && seg != 0){
               seg--;
           }
       }
       if(hr != 0){
           if(min == 0 && seg == 0){
               hr--;
               min = 59;
               seg = 59;
           }
           if(min == 0 && seg != 0){
                  seg--;  
           }
           if(min != 0 && seg == 0){
               min--;
               seg = 59;
           }
           if(min != 0  && seg != 0){
               seg--;
           }

       }
   }

   @ Override
   public String toString(){
       String tiempo = "";
       String ap;
       if(hr < 10){
           tiempo += "0" + hr + ":";         
       }
       else{
           tiempo += hr + ":";
       }
       if(min < 10){
           tiempo +="0" + min + ":";  
       }
       else{
           tiempo += min + ":";
       }
       if(seg < 10){
           tiempo +="0" + seg + " ";  
       }
       else{
           tiempo += seg + " ";
       }

       return tiempo;
   }

   public static void main(String args[]){

       boolean m = true;

       Temporizador t  = new Temporizador();
       Scanner       s = new Scanner(System.in);

       System.out.println("Buenas tardes...");
       System.out.println("Bienvenido al temporizador, a continuacion selecione las horas, minutos y segundo");
       System.out.println("para empezar la cuenta regresiva. P:");

           do{
       System.out.println("¿Cuantas horas?");
       int horas = Integer.parseInt(s.nextLine());
       t.setHr(horas);

       System.out.println("¿Cuantos minutos?");
       int minutos = Integer.parseInt(s.nextLine());
       t.setMin(minutos);

       System.out.println("¿Cuantos segundos?");
       int segundos = Integer.parseInt(s.nextLine());
       t.setSeg(segundos);

       if( t.getHr() == 0 && t.getMin()== 0 && t.getSeg()==0 ){
          System.out.println("No inicializado su temporizador");

       limpiaPantalla();}

       }while(t.getHr() == 0 && t.getMin()== 0 && t.getSeg()==0);

         do{ 

             System.out.println(t.toString());
           t.decrementa();
           try{
               Thread.sleep(1);// un thread es una ejecucion en el procesador
           }catch(Exception e){}
           if(t.getHr() == 0 && t.getMin()== 0 && t.getSeg()==0){
               m = false;
           }
       }while( m != false);

      System.out.println("Listones! Tiempo finalizado");


   }
}

我有分享我的代码的感觉。 Esta enespañolpor que soy de Mexico jaja。 制作不同情况的真值表真的很容易解决,我们有3个二进制变量是8个组合。

hr mn sg
0  0  0
0  0  1
0  1  0
0  1  1
1  0  0
1  0  1
1  1  0
1  1  1

一个代表变量中的数字值,例如:

101可能是----> 6hr:0':59''

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM