【问题标题】:Decrement and increment value?减值和增值?
【发布时间】:2025-12-29 14:10:07
【问题描述】:

我有最小和最大参数:

var min = 30;
var max = 35;

var num = 33;

还有一个步长为 100 毫秒的计时器。 在身体计时器上,我有代码:

if (num < max)
{
    // Step 1
    num = num + step;    
}

if (num >= max) 
{
     // Step 2
    num = num - step;
}

if (num <= min) 
{
    num = num + step;
}

问题是如果num = 34.98 工作步骤 1 (34.99 + 0,05),那么 步骤 2。所以在这一步我得到无限循环。如果num &gt; max 然后递减到min,我该怎么做?

【问题讨论】:

  • step的值是多少?总是 0.05?
  • 你可以发布包括循环的内容吗?
  • var num = 33; 创建int num,你确定它等于34.98
  • 让我理解这个问题。如果 num 大于 max,那么你想开始递减到 min 吗?反之亦然?如果是这样,那么您需要做的就是 ׳step*=-1׳ 。你是这个意思吗?
  • 除了显示代码之外,请说明您正在尝试做什么。

标签: c#


【解决方案1】:

好吧,您可以使用else if 来表示第二个if(以及else 来表示第三个)

所以你只能在每个循环中输入一个条件。

然后你可以将你的代码简化为这个(假设 min

if (num < max || num <= min) //remove num <= min and throw an exception if max < min could be also done...
   num += step;
else
   num -= step;

也可以是(如果 min

num = num < max 
         ? num + step 
         : num - step;

【讨论】:

  • 它可以工作,但是当我来到max 值时,我一步就得到了循环-+
  • 你可以添加一个 else if then,或者改变你的循环条件
【解决方案2】:

你可以只用这一行代码:

  num += num >= max || num <= min? (step = step*-1) : step;

例子:

static void Main(string[] args)
{
        var min = 31;
        var max = 33;

        double num = 32;

        double step = 0.10;            

        while (true)
        {
            Console.Clear();

            num += num >= max || num <= min? (step = step * -1) : step;

            Console.Write(num);
            Thread.Sleep(200);
        }
}

输出:LINK

【讨论】:

  • @Babaev 我为您提供了一个完美运行的代码示例。
【解决方案3】:

不要使用ifs,而是使用else ifelse

if (num < max)
    num = num + step;
else if (num >= max)
    num = num - step;
else
    num = num + step;

然后删除冗余if(注意num &lt; max || num &lt;= min等于num &lt; max

if (num < max)
    num = num + step;
else if (num >= max)
    num = num - step;

可以缩短为num += num &lt; max ? step : step * -1;

【讨论】:

    【解决方案4】:

    我已经这样做了:

    if ((num + step) <= max && flag_d == 0)
                {
                    num = num + step;
                }
                else {
    
                    if (num <= min) {
                        flag_d = 0;
                    }
    
                    flag_d = 1;
                    num = num - step;
                }
    

    【讨论】:

    • 这应该是解决问题还是澄清问题?如果是第一个,它看起来不合理。您有条件地设置flag_d = 0,然后无条件地将其设置为1。如果是第二个,请将其编辑到问题中。