gpt4 book ai didi

c# - 忽略 if 语句的设置函数 - 如果输入小于或等于 0,则应返回 0

转载 作者:太空宇宙 更新时间:2023-11-03 22:53:20 25 4
gpt4 key购买 nike

我有一个非常简单的任务,即在 C# 中使用 get 和 set 函数/方法(不确定您称之为什么)返回特定范围内的值。如果输入值小于或等于0,则返回值应为0,如果输入值大于或等于100,则应返回100。0和100之间的所有输入值直接返回,因为它们是。

问题是如果我输入负数作为输入,它不会将其更改为零。有趣的是,我的最大函数运行良好,尽管它与我的最小函数正好相反。

有人能告诉我为什么我的第一个 if 语句没有将负值更改为零吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RangeRestrictedInteger
{
public class RangedInteger
{
int minimum;
int maximum;
int valueReturn;

public RangedInteger(int min, int max)
{
minimum = min;
maximum = max;
}

public int Value
{
get
{
return valueReturn;
}
set
{
if (value <= minimum)
{
valueReturn = minimum;
}
if (value >= maximum)
{
valueReturn = maximum;
}
else
{
valueReturn = value;
}
}
}
}
class Program
{
static void Main(string[] args)
{
RangedInteger myInteger = new RangedInteger(0, 100);
myInteger.Value = 57;
Console.WriteLine("{0}", myInteger.Value); // Should be 57
myInteger.Value = 103;
Console.WriteLine("{0}", myInteger.Value); // Should be 100
myInteger.Value = -4;
Console.WriteLine("{0}", myInteger.Value); // Should be 0

Console.WriteLine("\nPress enter to exit.");
Console.ReadLine();
}
}
}

最佳答案

发生这种情况是因为您的第一个和第二个 if 不是互斥的:第二个 if 的最后一个 else 即使首先执行if

添加一个额外的 else 来解决这个问题:

if (value <= minimum)
{
valueReturn = minimum;
}
else if (value >= maximum)
{
valueReturn = maximum;
}
else
{
valueReturn = value;
}

请注意,您可以使用 Math.MinMath.Max 完全避免此问题

set {
valueReturn = Math.Min(Math.Max(value, minimum), maximum);
}

Demo.

关于c# - 忽略 if 语句的设置函数 - 如果输入小于或等于 0,则应返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46518823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com