تصف هذه المقالة تنفيذ Java لوظائف حاسبة التعبير البسيطة. شاركه للرجوع إليه ، على النحو التالي:
اقرأ في تعبير حساب عدد صحيح غير سالب يحتوي على +، -، *، / / ويحسب قيمة التعبير.
مدخل
يحتوي إدخال الاختبار على العديد من حالات الاختبار ، وتتناول كل حالة اختبار سطرًا واحدًا ، لا يزيد عن 200 حرف لكل سطر ، مفصولة بمساحة بين الأعداد الصحيحة والمشغلين. لا يوجد تعبير غير قانوني. عندما يكون هناك 0 فقط في صف ، ينتهي الإدخال ، ويجب عدم إخراج النتيجة المقابلة.
الإخراج
خط الإخراج 1 لكل حالة اختبار ، أي قيمة التعبير ، بالضبط إلى 2 أماكن عشرية.
عينة المدخلات
1 + 2
4 + 2 * 5 - 7/11
0
عينة الإخراج
3.00
13.36
هذه آلة حاسبة بسيطة. اسمحوا لي أن أشرح المبدأ بنفسي. ببساطة ، هو جعل اثنين من المداخن لتخزين القيم والآخر لتخزين رموز الإضافة والطرح والضرب والقسمة. يمكنك أيضًا استخدام المصفوفات ، لكن وظيفة المكدس الخاصة بـ Java ستكون أكثر ملاءمة للاستخدام.
تجدر الإشارة إلى أن المكدس المستخدم لتحميل القيم الرقمية يمكنه تخزين ما يصل إلى قيمتين رقميتين ، وهو للحساب. الشخص الذي يقوم بتثبيت الرمز هو تثبيت واحد. عندما نواجه " *" و "/" ، نقوم أولاً بإجراء الحساب ثم نضغط على المكدس. بالمناسبة ، عند كتابة وظائف التشغيل ، يجب عليك الانتباه إلى ترتيب العمليات. عندما كتبت ذلك بنفسي ، تعرضت للغش لفترة طويلة بسبب إهمال.
الرمز المحدد كما يلي:
حزمة temp ؛ import java.util.scanner ؛ import java.util.stack ؛ public class p1237 {public static void main (string [] args) {scanner sc = new scanner (system.in) ؛ String str = sc.nextline () ؛ بينما (! str.equals ("0"))) {// عندما يصل إلى 0 ، استخدم المكدس للقيام بالمكدس <double> num = new stack <bourent> () ؛ // أضف مجموعة القيمة <Charial> md = new stack <Charial> () ؛ // إضافة المشغلات "+" ، "،" ، "،"/"String str1 [] = str.split (" ") str1.length ؛ if (num.size () <= 1) {// يمكن وضع رقمين على الأقل في num.push (d) ؛ }} آخر {if (md.isempty ()) {// إذا كان الحرف فارغًا ، فأضف md.push ((str1 [i]). charat (0)) ؛ } else {char md1 = md.peek () ؛ // انظر ما هو الرمز الموجود على الطبقة العليا من المكدس char md2 = str1 [i] .rasharat (0) ؛ قم بتمثيل // تمثل الجزء العلوي من المكدس double lastnum = num.pop () ؛ // تمثل الجزء السفلي من المكدس // لأنه أقل من أو يساوي واحد ، قم أولاً ببوب الرمز في MD أولاً ، ثم اضغط على الرمز اللاحق ، ثم وضع النتيجة في num num.push (MathNum ، nextNum ، md.pop ())) ؛ Md.Push (str1 [i] .charat (0)) ؛ / * لا يمكنك عدم */ //} آخر إذا (opration (md1 ، md2) == 2 // الحكم على الرمز التالي // && i + 2 <str1.length // && خيار ((str1 [i + 2]). charat (0) ، md2)! // double lastNum = num.pop () ؛ // num.push (Math (NextNum ، LastNum ، Md2)) ؛ } آخر إذا (opration (md1 ، md2) == 2) {double nextNum = double.valueof (str1 [++ i]) ؛ // احصل على archnum double = num.pop () ؛ num.push (Math (LastNum ، NextNum ، MD2)) ؛ }}}}} if (! md.empty ()) {// إذا لم يكن مكدس المشغل فارغًا ، فيجب أن يكون هناك قيمتان رقميتان في المكدس الرقمي double nextNum = num.pop () ؛ double lastNum = num.pop () ؛ // system.out.printf ("٪. 2f" ، Math (LastNum ، NextNum ، Md.pop ())) ؛ System.out.println (string.format ("٪. 2F" ، Math (LastNum ، NextNum ، Md.pop ()))) ؛ } آخر if (num.size () == 1) {// system.out.printf ("٪. 2f/n" ، num.pop ()) ؛ system.out.println (string.format ("٪. 2f" ، num.pop ())) ؛ } str = sc.nextline () ؛ // احصل على العملية التالية}} private static math double (double num1 ، double num2 ، pop pop) {// استخدم حالة Sweep لأداء مفتاح التشغيل المطابق (pop) {case ' +': return (num1 + num2) ؛ القضية " - ': return num1 - num2 ؛ Case ' *': return num1 * num2 ؛ Case ' /': return num1 / num2 ؛ } return (double) 0 ؛ } عملية int ثابتة خاصة (char md1 ، char md2) {if (md1 == '*' || md1 == '/') {if (md2 == '*' || md2 == '/'/') {return 0 ؛ // clo rectirection أو division ، يكون ترتيب العمليات هو نفسه} ||. لـ (int i = 0 ؛ i <str.length () ؛ i ++) {if (ch [i] <48 || ch [i]> 57) {return false ؛ }} إرجاع صحيح ؛ }}ملاحظة: فيما يلي بعض أدوات الحساب للرجوع إليه:
أداة التحويل/الحساب البسيطة التعبير الرياضي عبر الإنترنت:
http://tools.vevb.com/jisuanqi/exp_jisuanqi
أداة حساب حلول أحادية الإنترنت (Eq) عبر الإنترنت:
http://tools.vevb.com/jisuanqi/equ_jisuanqi
الآلة الحاسبة العلمية عبر الإنترنت use_advanced calculator calculator على الإنترنت:
http://tools.vevb.com/jisuanqi/jsqkeexue
الآلة الحاسبة على الانترنت calculator_standard:
http://tools.vevb.com/jisuanqi/JSQ
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.