يتم تحويل سلاسل Java إلى تعبيرات حسابية لحساب النتائج وإخراجها. يمكن لهذه الأداة حساب التعبيرات الحسابية مباشرة في شكل سلاسل ، وهي بسيطة للغاية للاستخدام.
تحتوي هذه الأداة على حاسبة فئتين و ArithHelper
رمز الآلة الحاسبة كما يلي:
استيراد java.util.collections ؛ استيراد java.util.stack ؛/*** تقييم التعبير الحسابي* مباشرة استدعاء طريقة فئة الحاسبة ()* التمرير في تعبير حسابي سوف يعيد نتيجة قيمة عائمة* () Stack<Character> opStack = new Stack<Character>();// Operator stack private int[] operatorPriority = new int[] { 0, 3, 2, 1, -1, 1, 0, 2 };// Operator priority using operator ASCII code-40 for indexing public static double conversion(String expression) {double result = 0;Calculator cal = new Calculator();try {expression = transform(expression);result = cal.calculate (expression) ؛} catch (استثناء e) {// ~ 2+~ 1 *(~ 3e ~ 2)-(~ 1) *return */تحويل السلسلة الثابتة الخاصة (تعبير السلسلة) {char [] arr = expression.tocharray () ؛ for (int i = 0 ؛ i <arr.length ؛ i ++) {if (arr [i] == '-') (c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == 'e' || c == 'e') {arr [i] = '~' string (arr) ؛} else {return new string (arr) ؛}}/** * احسب وفقًا للتعبير المعطى * * @param التعبير * يتم حساب التعبير على سبيل المثال: 5+12 * (3+5)/7 * return */public double calpution (string expression) FirstValue ، SecondValue ، CurrentValue ؛ // القيمة الأولى ، الثانية ، CurrentValue ؛ // القيمة الأولى ، القيمة الثانية والمشغل الحسابي المشارك في الحساب بينما (! postfixstack.isempty ()) في stack stack currentValue = currentValue.replace ("~" ، "-") ؛ resultStack.push (currentValue) ؛} آخر {// إذا كان عاملًا ، فاخذ قيمتين من المكدس المعامل والمشاركة في العملية السلبية مع القيمة السلبية = changevalue = prodestack.pop () ؛ firstvalue.replace ("~" ، "-") ؛ SecondValue = secondValue.replace ("~" ، "-") تقوم مرحلة التحضير بتحويل التعبير إلى مكدس لاحقة * * param expression */private void إعداد (تعبير سلسلة) {opstack.push ('،') ؛ إلى هذا المشغل الحسابي يكون مريحًا أو عدديًا CARROP ، PEEKOP ؛ // المشغل الحالي والمشغل العلوي من أجل (int i = 0 ؛ i <arr.length ؛ i ++) {currentop = arr [i] خذ الرقم بين اثنين من المشغلين} peekop = opstack.peek () {postfixstack.push (string.valueof (opstack.pop ())) ؛} opstack.pop () ؛} آخر {بينما (currentop! = '(' && peekop! = '،' && compare (currentop ، peekop)) {postfixstack.push opstack.peek () ؛} opstack.push (currentOp) ؛} count = 0 ؛ currentIndex = i+1 ؛} آخر {count ++ ؛ CurrentIndex ، count)) ؛} بينما (opstack.peek ()!! = '،') {postfixStack.push (string.valueof (opstack.pop ())) ؛ == '+' || صحيح ، إن أولوية نظرة خاطفة افتراضية هي انخفاض النتيجة المنطقية = false ؛ SecondValue ، char currentop) {string result = "" ؛ switch (currentop) {case '+': result = string.valueof (arithHelper.add (firstvalue ، secondvalue)) ؛ string.valueof (arithHelper.mul (firstvalue ، secondvalue)) ؛ break ؛ case '/': result = string.valueof (arithhelper.div (firstvalue ، secondvalue)) ؛ break ؛} return return ؛}}رمز ARITHHELPER كما يلي:
الفئة العامة ArithHelper {// Default Division Operation Accuracy static static Final def_div_scale = 16 ؛ // لا يمكن إنشاء هذه الفئة ArithHelper () {}/*** توفر عمليات إضافة دقيقة. * * param v1 أضيفت * param v2 إضافة * return مجموع المعلمتين */add static add add (double v1 ، double v2) {java.math.bigdecimal b1 = new java.math.bigdecimal (double.toString (v1) ؛ java.math.bigdecimal java.math.bigdecimal (double.toString (v2)) ؛ return b1.add (b2) .doublevalue () ؛ java.math.bigdecimal (v2) ؛ return b1.add (b2) .doublevalue () ؛}/*** يوفر عمليات طرح دقيقة. *** param v1 اطرح* param v2 اطرح* return الفرق بين معلمتين*/public static sub double (double v1 ، double v2) {java.math.bigdecimal b1 = new java.math.bigdecimal (double.toString (v1)) ؛ java.math.bigdecimal (double.toString (v2)) ؛ return b1.subtract (b2) .doublevalue () ؛ java.math.bigdecimal (v2) ؛ return b1.subtract (b2) .doubleValue () ؛}/*** يوفر عمليات تكاثر دقيقة. * * param v1 * multiplier * param v2 * multiplier * regurn المنتج من معلمتين */public static double mul (double v1 ، double v2) {java.math.bigdecimal b1 = new java.math.bigdecimal (double.toString (v1)) ؛ java.math.bigdecimal (double.toString (v2)) ؛ return b1.multiply (b2) .doublevalue () ؛ new java.math.bigdecimal (v2) ؛ return b1.multiply (b2) .doublevalue () ؛}/*** يوفر (عملية تقسيم دقيقة (نسبيًا). عندما لا يكون هناك تقسيم ، فهو دقيق إلى 10 أرقام بعد النقطة العشرية ، ويتم تقريب الأرقام اللاحقة. * * param v1 * مقسم * param v2 * مقسم * اقتباس من المعلمتين */public static div div (double v1 ، double v2) {return div (v1 ، v2 ، def_div_scale) ؛} public static div (String v2) {java.math.bigdecim java.math.bigdecimal (v1) ؛ java.math.bigdecimal b2 = new java.math.bigdecimal (v2) ؛ return b1.divide (b2 ، def_div_scale ، java.bigdecimal.rond_half_up). عملية التقسيم. عندما لا يكون هناك نهاية لإكمال الفصل ، يتم تحديد الدقة بواسطة معلمة المقياس ، ويتم تقريب الأرقام اللاحقة. ** Param V1 Divider* Param V2 Divider* param مقياس يعني أنه يجب أن يكون دقيقًا لعدة أرقام بعد النقطة العشرية. * @RETURN Quitient of اثنين من المعلمتين*/public static div (Double V1 ، double V2 ، int Scale) {if (Scale <0) {throw new alficalargumentexception ("يجب أن يكون المقياس عددًا صحيحًا أو صفرًا") ؛} java.math.bigdecimal b1 = new = جديد java.math.bigdecimal (double.toString (v1)) ؛ java.math.bigdecimal b2 = new java.math.bigdecimal (double.tostring (v2)) ؛ return b1.divide (b2 ، scale ، java.math.bigdecimal.round_half_up) .doublevalue () ؛}/*** يوفر تقريب عشري دقيق. *. java.math.bigdecimal (double.toString (v)) ؛ java.math.bigdecimal واحد = new java.math.bigdecimal ("1") {if (scale <0) {رمي new alficalArgumentException ("يجب أن يكون المقياس عددًا صحيحًا أو صفرًا إيجابيًا") ؛} java.math.bigdecimal b = new java.math.bigdecimal (v) ؛ java.math.bigdecimal.round_half_up) .doublevalue () ؛}}عند استخدامه ، اتصل بطريقة التحويل () لفئة الآلة الحاسبة وتمريرها في معلمة التعبير الحسابية لإرجاع قيمة النوع المزدوج.
مثال على الاستخدام:
الفئة العامة MathTest {public static void main (string [] args) {string expression = "(0*1--3) -5/-4- (3*(-2.13))" ؛إخراج وحدة التحكم:
(0*1--3) -5/-4- (3*(-2.13)) = 10.64
لقطة الشاشة:
لخص
ما سبق هو كل التفسير المفصل لرمز التعبير الرياضي الحسابي Java ، وآمل أن يكون مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!