我有一个非常简单的任务,在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();
}
}
}
答案 0 :(得分:3)
这是因为您的第一个和第二个if
不是独占的:即使第一个else
被执行,第二个if
的最终if
也会被执行。
添加额外的else
来解决此问题:
if (value <= minimum)
{
valueReturn = minimum;
}
else if (value >= maximum)
{
valueReturn = maximum;
}
else
{
valueReturn = value;
}
请注意,您可以使用Math.Min
和Math.Max
set {
valueReturn = Math.Min(Math.Max(value, minimum), maximum);
}