我有属性:
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;
}
}
}
答案 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