Setting a range for an Integer in Java [duplicate]

2020-07-22 10:08发布

I have the attribute:

private int Number;

I want to limit this number so that it can only be between the values 1 - 3.

Would I do this within a method when I set the value or is there a way of predefining that I only want values 1 - 3 to be valid values for this integer?

Many thanks in advance.

Edit:

I want to take an input of a number between 1 -3.

I've tried using a while, do and for loop each of which I can't get to work without getting stuck in an infinite loop.

Here's some example code:

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

标签: java integer
7条回答
戒情不戒烟
2楼-- · 2020-07-22 10:52

The only way you could achieve that is by definig your own class for the number you want to limit. But, based on my experience, it looks like to me that what you are looking for is not an integer with a limited range of values, but is actually an 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;
  }
}
查看更多
欢心
3楼-- · 2020-07-22 10:54

No, but you can use Range from Google Guava

查看更多
祖国的老花朵
4楼-- · 2020-07-22 10:56

Unfortunately java.lang.Integer is final, so you cannot extend it. You can always implement class LimitedInteger and implement this logic there.

But It sounds like what you really need is enum supported by Java language since version 1.5.

查看更多
Bombasti
5楼-- · 2020-07-22 10:59

An Integer (int) does not have any constraints by itself, the only one are the minimum and maximum values bounded by the cardinality of a 32bit set. The method you are talking about is called an accessors. An accessor is a method which is used to set and get a value. This way you can validate, format or preprocess any value prior to assign them. You can easily code your accessor the following way:

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楼-- · 2020-07-22 11:06
public void setAnumber(int value) {
    if ((value < 1) || (value > 3))
        throw new IllegalArgumentException("value is out of range for anumber");
    this.anumber = value;
}
查看更多
Anthone
7楼-- · 2020-07-22 11:09

Unlike some languages (e.g. Ada), Java does not have a way to "predeclare" the acceptable range of a number. However, if you encapsulate the anumber into a class, you can enforce such a restriction using a setter method:

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");
        }
    }
}
查看更多
登录 后发表回答