我正在设计一个名为HugeInteger的类 - 它使用40个元素数组来存储整数。我提供了一个名为parse的方法,它接收一个String,提取每个数字,如下面的代码片段所示。我也提供方法添加它接收类HugeInteger的对象来进行添加。 为添加提供的方法没有按照提议的方式工作,如果您可以帮助我解决方案,我希望您。 P.S我注意到之前提出过一些类似的问题,但它对我没有帮助。
private int [] integerDigits = new int[SIZE];
//constructor that enables an object of class to be initialised when it is declared
public HugeInteger(String stringOfIntegers)
{
setOfIntegers = stringOfIntegers;
}//end of constructor
private int[] parseFunction (String str)
{
for (int i = 0; i < str.length(); i++)
{
char ch = str.charAt(i);
if (Character.isDigit(ch))
integerDigits[i] = Character.getNumericValue(ch);
else
integerDigits[i] = 0;
}
return integerDigits;
}//end of method parseFunction
public HugeInteger addFunction(HugeInteger number)
{
parseFunction(setOfIntegers);
return new HugeInteger(setOfIntegers +number.parseFunction(setOfIntegers));
}//end of method addFunction
答案 0 :(得分:1)
错误在于此行:
return new HugeInteger(setOfIntegers +number.parseFunction(setOfIntegers));
因为setOfIntegers是一个String,所以+符号并不意味着它们的加法而是连接(将它们背靠背写入)。因此,当添加5和6时,您将获得56而不是11。 您不需要调用构造函数,而是需要像在纸上一样从后面到前面实现添加,使用变量来保存进位号。
示例:
99
+ 11
0 carry 1
10 carry 1
= 110
此外,因为你总是使用40位数字而你从数组的前面开始,你的问题无法知道这些数字真正属于这个数字的多少,所以它无法区分“5”, “500”,“5000”等。这是一个问题,因为parseFunction(5)= parseFunction(50)= {5,0,0,0,...,0}(总共39个零),问题无法知道如何对齐数字。向下循环会更好(“integerDigits [40-i] = Character.getNumericValue(ch);”)因为那时“5”将变为0000 .... 05而“50”将变为000050。
另一个小错误是
number.parseFunction(setOfIntegers)
应该是
number.parseFunction(number.setOfIntegers)