有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

表示挪威出生号码的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位”

首选的解决方案是什么?渴望数学运算,还是为了方便而使用字符串


共 (2) 个答案

  1. # 1 楼答案

    The Norwegian eleven digit Birth Number is assigned at birth or registration with the National Population Register. The register is maintained by the Norwegian Tax Office. It is composed of the date of birth (DDMMYY), a three digit individual number, and two check digits.

    我很想创建一个BirthNumber类,其中LocalDate表示出生日期,另外两个字段的intString值取决于您对它们的操作。这样,您就可以在构造函数中解析出生编号,并使用实例方法获得所需的值

    根据下面的评论,我可以这样总结出生日期:

    import java.time.LocalDate;
    
    public class DNumberLocalDate {
    
        private final LocalDate localDate;
        private final boolean isDNumber;
    
        public DNumberLocalDate(LocalDate localDate, boolean isDNumber) {
            this.localDate = localDate;
            this.isDNumber = isDNumber;
        }
    
        public DNumberLocalDate(LocalDate localDate) {
            this(localDate, false);
        }
    
        public int getDayOfMonth() {
            return isDNumber ? localDate.getDayOfMonth() + 40 : localDate.getDayOfMonth();
        }
    
    }
    
  2. # 2 楼答案

    一个字符串可以表示一个以上的基本整数(前导0及以上) 因此,u应该将其存储为字符串,并将其设置为私有。 你可以为每种类型定义2个geter方法。 如果你想得到oop代码,千万不要直接访问VAR。 格里茨