سؤال

لدي مشكلة في فئة Java Biginterger: لا أستطيع لصق قيمة كبيرة في biginteger. على سبيل المثال، دعنا نقول أنني أرغب في تعيين bigintereger لهذا الرقم:

26525285981219105863630848482795

لا أستطيع تعيينه مباشرة، لأن المترجم يعتقد أنه عدد صحيح:

val bi = 26525285981219105863630848482795 //compile error

لكنني أريد أن تكون BigInteger. وبعد هل هناك أي طريقة لتتمكن من لصق هذا مباشرة في التعليمات البرمجية المصدر؟ إذا لم يكن هناك أي حال، فهل هناك طريقة في Scala، والتي لها أسهل بكثير BigInt صف دراسي؟ شكرا للمساعدة.

هل كانت مفيدة؟

المحلول

rtperson's إجابه هو الصحيح من وجهة نظر جافا، ولكن في scala يمكنك أن تفعل أكثر مع scala.BigIntS من ما يمكنك القيام به 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top