2013-04-09 102 views
-3

我嘗試使用的BigInteger這樣的(其中m和n爲整數):的BigInteger在Java中

m.substract(BigInteger.ONE), n.substract(BigInteger.ONE) 

它說:

我是什麼 「的基本類型int不能調用減法(BigInteger的)」我在這裏做錯了嗎?

+6

試圖調用'減法(BigInteger的)'的基本類型'int'。 – 2013-04-09 13:07:42

+0

int是一個原始類型。你必須把你的值包裝到Integer類 – ITroubs 2013-04-09 13:07:47

回答

7

int是一個本地數據類型,它是而不是一個對象!

也許你應該聲明mnBigIntegers而不是?

+0

它說方法減(BigInteger)是未定義整型 – user2036340 2013-04-09 13:12:35

+0

這是因爲它只在類BigInteger中定義,所以m需要是BigInteger類型 – GameDroids 2013-04-09 13:15:20

+0

'int's不是對象,所以它們根本沒有方法。在某些情況下,java會將'int'自動裝箱到'Integer'。 「整數」不具有(或需要)減法方法。當減去'int's時,使用'-'運算符,例如'm-n'。 '-'運算符僅適用於本機數據類型。當減去'BigInteger's時,你可以使用'subtract'方法,它只適用於其他'BigInteger's。 – 2013-04-09 13:34:48

4

m.substract(BigInteger.ONE)這裏m只是一個int它既不是一個BigInteger也不是一個Object任何種類的,但一個原始的。如果你想調用一個方法(substract(BigInteger i)),那麼m和n需要是classObject,實際上它的方法是substract(BigInteger i)

你可以做這樣的:

BigInteger mBig = new BigInteger(m); // in this case n is a String 
mBig = mBig.subtract(BigInteger.ONE); 

BTW:它被稱爲和(不帶S)

+0

'BigInteger'是不可變的,所以第二行不做任何事情,你需要重新賦值'mBig'。 「減量」的好處。 – 2013-04-09 13:16:15

+0

@ bmorris591謝謝:) – GameDroids 2013-04-09 13:19:40

0

int s爲原始時代,他們沒有方法不。減去。
盒裝類型Integer也沒有subract(BigInteger)方法。

你需要要麼使int s轉換BigInteger s的BigInteger.valueOfintValue使BigInteger s轉換int秒。

後一種方法是不安全的,因爲BigInteger可能大於Integer.MAX_VALUE

所以,你需要做的

BigInteger.valueOf(m).subtract(BigInteger.ONE), 
BigInteger.valueOf(n).subtract(BigInteger.ONE) 

但是,這是一個有點混亂,爲什麼不這樣做

BigInteger.valueOf(m - 1), BigInteger.valueOf(n - 1)