我正在努力让我的类(class)正常工作。它是一个自然数类,具有增加和减少等方法。我试图让它不可变,但我被卡住了。如果我增加一个数字,使其最低有效数字不是 9,它就可以正常工作。但是一旦我遇到边界情况,它就失败了。
即。我有一个数字 69999,我将它递增,结果是 7。
private SlowBigNatural(int[] natural, int nSize){
this.nSize = nSize - 1;
this.natural = new int[this.nSize];
for (int i = 0; i < this.nSize; i++) {
this.natural[i] = natural[i];
}
}
@Override
public BigNatural increment() {
int[] nClone = natural.clone();
if (nSize == 1 || nClone[nSize - 1] != HIGHEST) {
nClone[nSize - 1]++;
String nString = "";
for(int i = 0; i < nSize; i++){
nString += String.valueOf(nClone[i]);
}
BigNatural nInc = new SlowBigNatural(nString);
return nInc;
}
else {
nClone[nSize - 1] = 0;
BigNatural temp = new SlowBigNatural(nClone, nSize);
return temp.increment();
}
}
最佳答案
我对 endianness 有点困惑你的 BigNatural。您没有明确提及您如何存储号码。您可以先存储最高有效数字,也可以先存储最低有效数字。
即数字 12,345 可以存储为 {1,2,3,4,5}(Big Endian)或 {5,4,3,2,1}(Little Endian)。
如果您的增量是正确的,那么从 69,999 加 1 得到 7 可能是字节顺序问题。
即 {7,0,0,0,0} 如果是大字节序则为 70,000,如果是小字节序则为 7。检查字符串构造函数。查看它期望的字节顺序。
关于java - 递归和不变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7789458/