Miért a while ciklus fut le először?

0 értékelés
90 megtekintés
nooelnaagy (4 pont) kérdezte Már 29.
nooelnaagy szerkesztett Már 29.

Van egy button objektumom amihez hozzá van kapcsolva egy event handler. Ezen bellül van egy if metódus. Az if első pár sorában eltüntet valamint megjelentet pár objektumot. Szintén az if-en bellül van egy while ciklus amely addig megy még az érték nem lesz. Valamiért amikor aktiválódik az eventhandler akkor először a while ciklus fut le és amikor végzett akkor jelennek meg vagy tünnek el az objetkutom. Mi erre a megoldás?

A válaszokat előre köszönöm!

submitBtn.setOnAction(new EventHandler() {

            @Override
            public void handle(Event event) {
                if(hasTime(hourCb.getValue(), minCb.getValue(), secCb.getValue()) == true){
                    int hour = hourCb.getValue();
                    int min = minCb.getValue();
                    int sec = secCb.getValue();
                    pauseBtn.setVisible(true);
                    submitBtn.setVisible(false);
                    hmsHBox.setVisible(false);
                    hmsLb.setVisible(true);
                    System.out.println(hour+":"+min+":"+sec);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException ex) {
                        System.err.println(ex);
                    }
                    
                    while(hour!=0 || min!=0 || sec!=0){
                        pauseBtn.setVisible(true);
                        submitBtn.setVisible(false);
                        hmsHBox.setVisible(false);
                        hmsLb.setVisible(true);
                        if(sec == 0 && min != 0){
                            min--;
                            sec=60;
                        }
                        if(min == 0 && hour != 0){
                            hour--;
                            min = 60;
                        }
                        sec--;
                        System.out.println(hour+":"+min+":"+sec);
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException ex) {
                            System.err.println(ex);
                        }
                    }
                }
            }
        });

public static boolean hasTime(int hour, int min, int sec){
        if(hour!=0){
            return true;
        }
        if(min!=0){
            return true;
        }
        if(sec!=0){
            return true;
        }
        return false;
    }

1 Válasz

0 értékelés
Ivo (24 pont) válaszolta meg Ápr 3.

Tehát

 if(hasTime(hourCb.getValue(), minCb.getValue(), secCb.getValue()) == true){ 

ez a feltétel teljesül így be lép... Ha figyeled akkor szépen el kezd le futni (sorról sorra) értéket add átt láthatóságot állít be..

majd mikor oda ér a while-hoz akkor az óra, perc, másodperc nem nulla!!! akkor megint láthatóságot állít be

És úgy jönnek az if-ek ha az egyik igaz be lép...  

Nem tudom pontosan mi a szándékod, de remélem ez segít gondolkodni

nooelnaagy (4 pont) szólt hozzá Ápr 3.
Ennek szerintem is így kellene működnie, de amikor belép az if-be egyből a while fut le és a setVisible csak akkor fut le ha a while lefutott.
Ivo (24 pont) szólt hozzá Ápr 3.
IF után:
 pauseBtn.setVisible(true);
  submitBtn.setVisible(false);
 hmsHBox.setVisible(false);
  hmsLb.setVisible(true);

WHILE után:
 pauseBtn.setVisible(true);
 submitBtn.setVisible(false);
hmsHBox.setVisible(false);
hmsLb.setVisible(true);

a kettő ugyan az csinálja cikluson belül csak más feltétel
if-től indul abba biztos lehetsz
nooelnaagy (4 pont) szólt hozzá Ápr 3.
Ez egy olyan program lesz amelybe ha beírsz egy adott időt azt elkezdi visszafelé leszámolni ameddig 0 nem lesz(magyarul időzítő). Az a probléma hogy elkezdi számolni az időt és miután az idő 0 lesz csak azután jeleníti meg az adott objektumokat.
...