2012-03-27 9 views
0

我正在設計一個名爲HugeInteger的類 - 它使用40個數字數組來存儲整數。我提供了一個名爲parse的方法,它在其中接收一個字符串,提取每個數字,如下面的代碼片段所示。我也提供方法添加它接收一個類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 
+2

'規定的添加方法是不工作的proposed' ...怎麼樣? – talnicolas 2012-03-27 18:04:15

+5

這是家庭作業,還是有其他一些你不喜歡'BigInteger'的原因? – 2012-03-27 18:04:36

+0

@Louise,這是一項功課,因爲我目前正在自學Java。 – Sinan 2012-03-27 18:05:46

回答

1

的錯誤在於在這條線的位置:

return new HugeInteger(setOfIntegers +number.parseFunction(setOfIntegers)); 

因爲setOfIntegers是一個字符串,+號並不意味着除了而是串連他們(寫他們背靠背)。因此,當添加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) 
+0

謝謝Kirdie的投入 - 非常感謝。 – Sinan 2012-03-29 21:18:47

+0

很高興幫助!如果回答您的問題,請將答案標記爲已接受。 – 2012-03-30 09:55:58