在Java中设置Integer的范围

时间:2011-12-07 18:40:47

标签: 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;
            }
    }
}

7 个答案:

答案 0 :(得分:11)

与某些语言(例如Ada)不同,Java没有办法预先解决&#34;一个数字的可接受范围。但是,如果将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");
        }
    }
}

答案 1 :(得分:4)

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

答案 2 :(得分:4)

在此属性的setter中强制执行约束肯定会有效。您可以做的另一件事是使用枚举而不是整数,具体取决于您的家庭作业约束。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

你可以实现这一目标的唯一方法是通过definig 你自己的类来获得你想要限制的数字。但是,根据我的经验,我觉得你所寻找的不是一个有限范围值的整数,但实际上是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;
  }
}

答案 5 :(得分:0)

Integer(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;
}

答案 6 :(得分:-2)

不,但您可以使用Google Guava的Range