我有一个属性:
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