表示挪威出生号码的java Long或String
我有一个叫做Person的类,看起来像这样:
public abstract class Person {
private String birthNo;
...
}
挪威出生号码有11位数长,由on this Wikipedia page描述的算法构造而成。我不能使用int,因为大多数出生数字都超过Integer.MAX_VALUE
我听说,在决定使用字符串还是整数来存储数值时,应该问问自己:我需要对这个值执行数学运算吗
我是在birthNo
上做这件事的,但是使用String的charAt(int i)
很多操作变得更容易了。如果我要将出生号码存储为长的,我必须使用模和除法来获得所需的数字:
int ninth = Character.getNumericValue(birthNo.charAt(8));
与
int ninth = birthNo / 100 % 10
我想做的数学运算是获取此人的性别(如果第9位数字是偶数,则为女性),并使用类似于ISBN的算法验证出生号码
使用字符串的另一个理由是,一些出生号码将有前导零,因此如果存储为长字符串,则不是“11位”
首选的解决方案是什么?渴望数学运算,还是为了方便而使用字符串
# 1 楼答案
我很想创建一个
BirthNumber
类,其中LocalDate
表示出生日期,另外两个字段的int
或String
值取决于您对它们的操作。这样,您就可以在构造函数中解析出生编号,并使用实例方法获得所需的值根据下面的评论,我可以这样总结出生日期:
# 2 楼答案
一个字符串可以表示一个以上的基本整数(前导0及以上) 因此,u应该将其存储为字符串,并将其设置为私有。 你可以为每种类型定义2个geter方法。 如果你想得到oop代码,千万不要直接访问VAR。 格里茨