我想设置Java中int
值的限制。我正在创建一个简单的健康系统,我希望我的健康状况保持在0到100之间。我该怎么做?
答案 0 :(得分:12)
我建议您创建一个名为Health的类,如果满足约束条件,则每次都检查是否设置了新值:
public class Health {
private int value;
public Health(int value) {
if (value < 0 || value > 100) {
throw new IllegalArgumentException();
} else {
this.value = value;
}
}
public int getHealthValue() {
return value;
}
public void setHealthValue(int newValue) {
if (newValue < 0 || newValue > 100) {
throw new IllegalArgumentException();
} else {
value = newValue;
}
}
}
答案 1 :(得分:4)
使用getter / setter模型。
public class MyClass{
private int health;
public int getHealth(){
return this.health;
}
public int setHealth(int health){
if(health < 0 || health > 100){
throw new IllegalArgumentException("Health must be between 0 and 100, inclusive");
}else{
this.health = health;
}
}
}
答案 2 :(得分:3)
我会创建一个强制执行该操作的类。
public class Health {
private int health = 100;
public int getHealth() {
return health;
}
// use this for gaining health
public void addHealth(int amount) {
health = Math.min(health + amount, 100);
}
// use this for taking damage, etc.
public void removeHealth(int amount) {
health = Math.max(health - amount, 0);
}
// use this when you need to set a specific health amount for some reason
public void setHealth(int health) {
if (health < 0 || health > 100)
throw new IllegalArgumentException("Health must be in the range 0-100: " + health);
this.health = health;
}
}
这样,如果你有一个Health
的实例,你知道它代表了一个有效的健康数量。我想你通常只想使用像addHealth
这样的方法,而不是直接设置健康状况。
答案 3 :(得分:1)
封装字段并检查setter方法。
int a;
void setA(int a){
if value not in range throw new IllegalArgumentException();
}
答案 4 :(得分:0)
无法限制Java中的原语。你唯一能做的就是为此编写一个包装类。当然,通过这样做,您将失去良好的操作员支持,并且必须使用方法(如BigInteger
)。
答案 5 :(得分:0)
public void setHealth(int newHealth) {
if(newHealth >= 0 && newHealth <= 100) {
_health = newHealth;
}
}
答案 6 :(得分:-3)
创建特殊类没有意义。 要增加i,请使用:
public void specialIncrement(int i) { 如果(I&LT; 100) 我++ }