Показывать уведомление о каждом шаге различия между двумя значениями - PullRequest
0 голосов
/ 05 сентября 2010

Я должен ответить на этот вопрос, который кажется загадкой ... Я не знаю, есть ли реальное решение или это невозможно ...

Вопросы: Имея два двойных значения, одно является общей суммойденег в сейфе, другой - порог максимальной суммы денег, рекомендуемый в сейфе

Например: рекомендуемая стоимость денег (порог): $ 1500

Общая сумма - это переменная, которая рассчитывается каждые5 секунд по таймеру, в этом событии отметки таймера у меня есть значение рекомендуемой суммы денег и значение общей суммы денег в сейфе.

При событии отметки таймера мне нужно проверитьесли общая сумма денег превышает рекомендованное значение, отобразите уведомление для пользовательского интерфейса пользователя.Но так как событие отметки таймера происходит каждые 5 секунд, мне нужно в первый раз показывать уведомление о том, что общая сумма превышает рекомендованную сумму, и каждые 50 $ разницы превышают пороговое значение.

Пример (каждая строка этого примера является событием таймера):

Total : 1200$ − Recommended : 1500$   → No Notification
Total : 1505$ − Recommended : 1500$   → Notification (first overcoming of threshold)
Total : 1520$ − Recommended : 1500$   → No Notification 
Total : 1537$ − Recommended : 1500$   → No Notification
Total : 1558$ − Recommended : 1500$   → Notification (first overcoming of 50$ step)
Total : 1574$ − Recommended : 1500$   → No Notification
Total : 1586$ − Recommended : 1500$   → No Notification
Total : 1598$ − Recommended : 1500$   → No Notification
Total : 1612$ − Recommended : 1500$   → Notification (second overcoming of 50$ step)
Total : 1623$ − Recommended : 1500$   → No Notification

И так далее.Есть ли способ (математический расчет или алгоритм) показать это уведомление, зная только эти два значения, без сохранения какой-либо другой переменной в памяти?

Я не могу сохранить предыдущее значение "общая сумма" впеременная.

Я не знаю, есть ли решение, но кто-то передал мне этот вопрос как загадку.

У вас есть идея, если есть решение дляэтот вопрос?

Ответы [ 4 ]

1 голос
/ 05 сентября 2010

Я считаю, что это домашнее задание. Я удалил все комментарии из-за этого. Вам нужно будет самостоятельно разобраться в коде.

public class ExampleApp
{
    private int _currentMoney = 1450;
    private int _lastNotificationStep = 29; // 50 * 30 = 1500

    [STAThread]
    public static void Main(string[] argv)
    {
        var app = new ExampleApp();
        app.InYourLoop(50);
        app.InYourLoop(30);
        app.InYourLoop(40);
    }

    public void InYourLoop(int deposited)
    {
        int total = _currentMoney + deposited;

        var currentStep = (int) Math.Floor(total/50d);
        if (_lastNotificationStep != currentStep && total >= 1500)
        {
            for (int step = _lastNotificationStep; step < currentStep; ++step)
            {
                Console.WriteLine("Notification of step: " + currentStep + " for total " + total);
                _lastNotificationStep = currentStep;
            }
        }

        _currentMoney = total;
    }
}
1 голос
/ 05 сентября 2010

Вам нужно знать 1500 долларов, потому что вы выводите это. Вам нужно знать значение, которое приходит. Вам также нужно знать предыдущий контекст, иначе вы не знаете, что делать с вызовом типа

NotifyOrNot ($ 1537)

Так что где бы он ни хранился, вам нужен этот контекст. Вероятно, есть способы сделать это с количеством уведомлений, с делегатом, возвращенным из делегата, который вы вызвали изначально, с различиями между значениями и т. Д. - это просто разные способы хранения этого контекста. Вам все еще нужен третий кусок памяти. Или даже 4-й, так как вы также сохраняете разность шагов в 50 долларов.

0 голосов
/ 05 сентября 2010

Вы сказали, что не можете хранить последнюю общую сумму в переменной, но можете ли вы хранить другие вещи?Я думаю, вам нужно только значение NextThreshold.

int NextThreshold = 1500;
while (true)
{
  int CurrentBalance = GetNextBalance();
  if (CurrentBalance > NextThreshold)
  {
    Console.WriteLine("You spent too much, foo");
    while (NextThreshold < CurrentBalance)
      NextThreshold += 50;
  }
}
0 голосов
/ 05 сентября 2010

Показать N уведомлений, где N = (currentMoney - recommendedMoney)/step, где шаг = 50?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...