как сформировать лучший логический элемент в методе Android Java - PullRequest
0 голосов
/ 09 октября 2018

У меня есть этот метод, который вызывается несколько раз в день.

public void dayUpdater() {
    Date now = new Date();
    SimpleDateFormat numDate = new SimpleDateFormat("EEEE");

    String[] Days = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
    String day = numDate.format(now);

    if (day.equals(Days[0])) {
        Toast.makeText(getApplicationContext(), "Total for " + numDate.format(now)
                + " is " + 5000, Toast.LENGTH_LONG).show();
    if (day.equals(Days[1])) Toast.makeText(getApplicationContext(), "Total for " + numDate.format(now)
                + " is " + 5000, Toast.LENGTH_LONG).show();
    if (day.equals(Days[2])) Toast.makeText(getApplicationContext(), "Total for " + numDate.format(now)
                + " is " + 4000, Toast.LENGTH_LONG).show();
    if (day.equals(Days[3])) Toast.makeText(getApplicationContext(), "Total for " + numDate.format(now)
                + " is " + 3000, Toast.LENGTH_LONG).show();
    if (day.equals(Days[4])) Toast.makeText(getApplicationContext(), "Total for " + numDate.format(now)
                + " is " + 2000, Toast.LENGTH_LONG).show();
    if (day.equals(Days[5])) Toast.makeText(getApplicationContext(), "Total for " + numDate.format(now)
                + " is " + 1000, Toast.LENGTH_LONG).show();
    if (day.equals(Days[6])) Toast.makeText(getApplicationContext(), "Total for " + numDate.format(now)
                + " is " + 1000, Toast.LENGTH_LONG).show();

}

Теперь только 1 "if-Statement" вызывается каждый день.Я создал bool под названием xbool, чтобы помочь вызывать мой метод один раз в день.Также будет вызван метод, приведенный ниже.

private boolean xbool = true;

private void reStartDay() {
    saveAllContents();
    clearAllEntries();
}

Если xbool имеет значение false, мы вызываем наш метод, затем переводим его в значение true.и когда это правда, мы ничего не делаем.Вот рабочий пример, который будет применен к каждому оператору if.

if (day.equals(Days[0])) {
        Toast.makeText(getApplicationContext(), "Total for " + numDate.format(now)
                + " is " + 5000, Toast.LENGTH_LONG).show();
        if (xbool == false) {
            reStartDay();
            xbool = true;
        }
    }

Моя проблема - однажды наступит следующий день.то есть другой оператор if в этом случае действителен из кода выше для:

if (day.equals(Days[1])) {
        Toast.makeText(getApplicationContext(), "Total for " + numDate.format(now)
                + " is " + 5000, Toast.LENGTH_LONG).show();
        if (xbool == false) {
            reStartDay();
            xbool = true;
        }
    }

Где день теперь равен Дням [1] вместо Дней [0].Проблема в том, что мой xbool верный.Так что в этот новый день не будет вызова reStartDay (), потому что xbool не ложь.Я решил переключить каждый оператор if в dayUpdater на противоположный.Что выглядит так:

if (day.equals(Days[0])) { 
    if (xbool == false){
        reStartDay();
        xbool = true;
    }
}
if (day.equals(Days[2])) { 
    if (xbool == true){
        reStartDay();
        xbool = false;
    }
}

Среда проверяет на ложность и превращает xbool в true.и т. д. и т. д. вы получите шаблон.

Как только я доберусь до воскресенья, хотя оно не соответствует ожиданиям понедельника, Sunday проверяет, является ли xbool ложным, и изменяет его на true.

Но понедельник ожидает, что xbool будет ложным, поэтому он может вызватьreStartDay () для понедельника.Мне нужны предложения о том, что делать.или что поменять.Пожалуйста, я никогда не был хорош с логическим, поэтому я знаю, что я узнаю что-то независимо от ответа / предложения, которое я получу.

1 Ответ

0 голосов
/ 09 октября 2018

Исходя из вашего кода, похоже, что вы хотите выполнять определенный код только один раз в день, несмотря на то, что метод запускается несколько раз в день.

Чтобы добиться того же, вы можете сделать это.

Объявите переменную экземпляра следующим образом:

private String currentDay = null;

В вашем методе dayUpdater вместо того, чтобы писать так много ifs, что, если вы просто напишите это так,

public void dayUpdater() {
    Date now = new Date();
    SimpleDateFormat numDate = new SimpleDateFormat("EEEE");
    String[] Days = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
    String day = numDate.format(now);
    if (!day.equals(currentDay)) {
        Toast.makeText(getApplicationContext(), "Total for " + day
                + " is " + 5000, Toast.LENGTH_LONG).show();
        reStartDay();
        currentDay = day;
    }
}

Надеюсь, это сработаетдля вас.

...