جافا / scala biginteger اللصق
-
18-09-2019 - |
سؤال
لدي مشكلة في فئة Java Biginterger: لا أستطيع لصق قيمة كبيرة في biginteger. على سبيل المثال، دعنا نقول أنني أرغب في تعيين bigintereger لهذا الرقم:
26525285981219105863630848482795
لا أستطيع تعيينه مباشرة، لأن المترجم يعتقد أنه عدد صحيح:
val bi = 26525285981219105863630848482795 //compile error
لكنني أريد أن تكون BigInteger
. وبعد هل هناك أي طريقة لتتمكن من لصق هذا مباشرة في التعليمات البرمجية المصدر؟ إذا لم يكن هناك أي حال، فهل هناك طريقة في Scala، والتي لها أسهل بكثير BigInt
صف دراسي؟ شكرا للمساعدة.
المحلول
rtperson's إجابه هو الصحيح من وجهة نظر جافا، ولكن في scala يمكنك أن تفعل أكثر مع scala.BigInt
S من ما يمكنك القيام به java.math.BigInteger
س.
علي سبيل المثال:
scala> val a = new BigInteger("26525285981219105863630848482795");
a: java.math.BigInteger = 26525285981219105863630848482795
scala> a + a
:7: error: type mismatch;
found : java.math.BigInteger
required: String
a + a
الطريقة الكنسية في Scala لإرساء الفصل هي استخدام مصنع موجود فيكائن رفيق. وبعد عند كتابة Foo (Args) في Scala، يتم ترجمة هذا إلى Foo.Apply (Args)، حيث Foo هو كائن Singleton - كائن رفيق. حتى تجد طرق البناء BigInt
يمكنك إلقاء نظرة على BigInt
كائن في مكتبة SCALA، وتحديدا في apply
بناء.
لذلك، ثلاث طرق لبناء BigInt
هي: اجتيازها Int
, ، أ Long
أو أ String
لتحليل. مثال:
scala> val x = BigInt(12)
x: BigInt = 12
scala> val y = BigInt(12331453151315353L)
y: BigInt = 12331453151315353
scala> val z = BigInt("12124120474210912741099712094127124112432")
z: BigInt = 12124120474210912741099712094127124112432
scala> x + y * z
res1: BigInt = 149508023628635151923723925873960750738836935643459768508
لاحظ الشيء الجميل الذي يمكنك القيام به عمليات حسابية طبيعية تبدو مع BigInt
, ، وهذا غير ممكن مع BigInteger
!
نصائح أخرى
هذا يجب أن يعمل:
BigInteger bigInt = new BigInteger("26525285981219105863630848482795");
يقرأ biginteger سلاسل ويقرها في الرقم الصحيح. لهذا السبب، سترغب في التحقق من java.text.numbormat.