在Java中设置Integer的范围



我有一个属性:

private int Number;

我想限制这个数字,所以它只能在值1到3之间

当我设置值时,我会在方法中这样做吗?或者是否有一种方法可以预定义我只希望值1 - 3是这个整数的有效值?

提前感谢。

编辑:

我想输入一个介于1 -3之间的数字。

我试过使用while, do和for循环,每个我都不能在不陷入无限循环的情况下工作。

下面是一些示例代码:

    private int Number;
    public void setNumber(int aNumber) {
        int count = 1;
        while (count !=0) {
            if ((aNumber < 1) || (aNumber > 3)) {
                System.out.println("Value is out of range 1-3");
                System.out.println("Please try again");
                break;
            } 
            else {
                this.Number = aNumber;
                count = 0;
            }
    }
}

与某些语言(例如Ada)不同,Java没有办法"预先声明"数字的可接受范围。但是,如果您将anumber封装到一个类中,则可以使用setter方法强制执行这样的限制:

class RestrictedRangeExample {
    private int anumber;
    public void setAnumber(int newanumber) {
        if (newanumber >= 1 && newanumber <= 3) {
            anumber = newanumber;
        } else {
            throw new IllegalArgumentException("anumber out of range");
        }
    }
}
public void setAnumber(int value) {
    if ((value < 1) || (value > 3))
        throw new IllegalArgumentException("value is out of range for anumber");
    this.anumber = value;
}

在此属性的setter中强制约束当然可以工作。您可以做的另一件事是使用枚举而不是整数,这取决于您的家庭作业的约束。

不幸的是java.lang.Integer是final,所以不能扩展它。您总是可以实现类LimitedInteger并在那里实现此逻辑。

但是听起来你真正需要的是Java语言从1.5版开始支持enum

实现这一点的唯一方法是为您想要限制的数量定义您自己的类。但是,根据我的经验,在我看来,你正在寻找的不是一个值范围有限的整数,而实际上是一个enum。

public enum MyNumber {
  ONE(1),
  TWO(2),
  THREE(3);
  private int value;
  private MyNumber(int value) {
    this.value = value;
  }
  public int getValue() {
    return value;
  }
}

整数(int)本身没有任何约束,唯一的约束是由32位集合的基数限定的最小值和最大值。您正在谈论的方法称为访问器。访问器是一种用于设置和获取值的方法。通过这种方式,您可以在赋值之前验证、格式化或预处理任何值。您可以通过以下方式轻松地编写访问器:

import java.lang.Math.*;
void setNumber(int aNumber)
{
this.number = Math.min(3, Math.max(aNumber,1));
if (this.number != aNumber) throw new IllegalArgumentException("aNumber is out of range");
}
int getNumber()
{
return this.number;
}

不能,但是你可以使用Google Guava的Range

最新更新