บทความนี้อธิบายการใช้งาน Java ของฟังก์ชั่นเครื่องคิดเลขนิพจน์อย่างง่าย แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
อ่านในนิพจน์การคำนวณจำนวนเต็มที่ไม่เป็นลบซึ่งมีเพียง +, -, -, *, / และคำนวณค่าของนิพจน์
ป้อนข้อมูล
อินพุตทดสอบมีหลายกรณีทดสอบแต่ละกรณีทดสอบใช้หนึ่งบรรทัดโดยไม่เกิน 200 อักขระต่อบรรทัดคั่นด้วยช่องว่างระหว่างจำนวนเต็มและตัวดำเนินการ ไม่มีการแสดงออกที่ผิดกฎหมาย เมื่อมีเพียง 0 ในแถวอินพุตจะสิ้นสุดและผลลัพธ์ที่สอดคล้องกันไม่ควรเป็นเอาต์พุต
เอาท์พุท
เอาต์พุต 1 บรรทัดสำหรับแต่ละกรณีทดสอบนั่นคือค่าของนิพจน์ตรงไปยัง 2 ตำแหน่งทศนิยม
อินพุตตัวอย่าง
1 + 2
4 + 2 * 5 - 7/11
0
ตัวอย่างเอาต์พุต
3.00
13.36
นี่คือเครื่องคิดเลขง่าย ๆ ให้ฉันอธิบายหลักการด้วยตัวเอง พูดง่ายๆก็คือการทำสแต็คสองอันสำหรับการจัดเก็บค่าและอื่น ๆ สำหรับการจัดเก็บสัญลักษณ์ของการเพิ่มการลบการคูณและการหาร นอกจากนี้คุณยังสามารถใช้อาร์เรย์ได้ แต่ฟังก์ชั่นสแต็กของ Java จะใช้งานได้ง่ายกว่า
เป็นที่น่าสังเกตว่าสแต็กที่ใช้ในการโหลดค่าตัวเลขสามารถจัดเก็บค่าตัวเลขได้สูงสุดสองค่าซึ่งใช้สำหรับการคำนวณ ผู้ที่ติดตั้งสัญลักษณ์คือการติดตั้งหนึ่ง เมื่อเราพบ ' *' และ '/' ก่อนอื่นเราทำการคำนวณก่อนจากนั้นกดสแต็ก โดยวิธีการเมื่อเขียนฟังก์ชั่นการดำเนินงานคุณต้องใส่ใจกับคำสั่งของการดำเนินการ เมื่อฉันเขียนด้วยตัวเองฉันถูกโกงเป็นเวลานานเพราะความประมาทของฉัน
รหัสเฉพาะมีดังนี้:
แพ็คเกจอุณหภูมิ; นำเข้า java.util.scanner; นำเข้า java.util.stack; คลาสสาธารณะ p1237 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สแกนเนอร์ SC = เครื่องสแกนใหม่ (System.in); string str = sc.nextline (); ในขณะที่ (! str.equals ("0")) {// เมื่อถึง 0 ให้ใช้สแต็กเพื่อทำสแต็ก <bouble> num = สแต็กใหม่ <bouble> (); // เพิ่มค่าสแต็ก <cartels> md = สแต็คใหม่ <cartels> (); // เพิ่มตัวดำเนินการ "+"-","*" 0; i <str1.length; if (num.size () <= 1) {// อย่างน้อยสองตัวเลขสามารถใส่ลงใน num.push (d); }} else {ถ้า (md.isempty ()) {// ถ้าตัวละครว่างเปล่าให้เพิ่มใน md.push ((str1 [i]). charat (0)); } else {char md1 = md.peek (); // ดูสัญลักษณ์อะไรอยู่ที่ชั้นบนสุดของสแต็กถ่าน md2 = str1 [i] .charat (0); // สัญลักษณ์ของ II/** เขียนฟังก์ชั่นเพื่อตัดสินตามค่าผลตอบแทน สแต็กเพื่อใช้งาน // แสดงส่วนบนของสแต็กสองเท่า lentNum = num.pop (); // แสดงถึงด้านล่างของสแต็ก // เพราะมันน้อยกว่าหรือเท่ากับหนึ่ง, ป๊อปสัญลักษณ์แรกใน MD ก่อนจากนั้นกดสัญลักษณ์ที่ตามมา md.push (str1 [i] .charat (0)); / * คุณไม่สามารถ */ //} อื่นได้ถ้า (opration (md1, md2) == 2 // ตัดสินสัญลักษณ์ถัดไป // && i + 2 <str1.length // && ตัวเลือก ((str1 [i + 2]). Charat (0), md2)! = 1) {// double nextnum = doublenum = doublenum = doublenum = doublenum // double lastNum = num.pop (); // num.push (คณิตศาสตร์ (NextNum, LastNum, MD2)); } อื่นถ้า (opration (md1, md2) == 2) {double nextnum = double.valueof (str1 [++ i]); // รับ double lastNum ถัดไป = num.pop (); num.push (คณิตศาสตร์ (LastNum, NextNum, MD2)); }}}}} if (! md.empty ()) {// ถ้าสแต็กของตัวดำเนินการไม่ว่างเปล่าจะต้องมีค่าตัวเลขสองตัวในสแต็กตัวเลข double nextNum = num.pop (); double lastNum = num.pop (); // system.out.printf ("%. 2f", คณิตศาสตร์ (LastNum, NextNum, md.pop ())); System.out.println (string.format ("%. 2f", คณิตศาสตร์ (LastNum, NextNum, Md.pop ()))); } อื่นถ้า (num.size () == 1) {// system.out.printf ("%. 2f/n", num.pop ()); System.out.println (string.format ("%. 2f", num.pop ())); } str = sc.nextline (); // รับการดำเนินการถัดไป}} คณิตศาสตร์คู่คงที่ส่วนตัว (double num1, double num2, pop ตัวอักษร) {// ใช้กรณีการกวาดเพื่อดำเนินการสวิตช์การทำงานที่ตรงกัน (ป๊อป) {case ' +': return (num1 + num2); กรณี ' -': return num1 - num2; กรณี ' *': ส่งคืน num1 * num2; กรณี ' /': ส่งคืน num1 / num2; } return (double) 0; } การดำเนินการ int แบบคงที่ส่วนตัว (Char Md1, Char Md2) {ถ้า (md1 == '*' || md1 == '/') {ถ้า (md2 == '*' || md2 == '/') {return 0; // ถ้าทั้งสอง md2 == '/') {return 2; // เรียกใช้ md2 แรก}} return 0; // คำสั่งของการเพิ่มและการลบเป็น}} // พิจารณาว่าเป็นจำนวนบูลีนคงที่ส่วนตัว (สตริง str) {char ch [] = str.tochararray (); สำหรับ (int i = 0; i <str.length (); i ++) {ถ้า (ch [i] <48 || ch [i]> 57) {return false; }} ส่งคืนจริง; -PS: นี่คือเครื่องมือการคำนวณบางอย่างสำหรับการอ้างอิงของคุณ:
การแสดงออกทางคณิตศาสตร์ออนไลน์เครื่องมือแปลง/การคำนวณอย่างง่าย:
http://tools.vevb.com/jisuanqi/exp_jisuanqi
เครื่องมือการคำนวณฟังก์ชั่น unary unary (eq):
http://tools.vevb.com/jisuanqi/equ_jisuanqi
เครื่องคิดเลขทางวิทยาศาสตร์ออนไลน์ use_advanced เครื่องคิดเลขออนไลน์เครื่องคิดเลข:
http://tools.vevb.com/jisuanqi/jsqkeexue
เครื่องคิดเลขออนไลน์ _Standard เครื่องคิดเลข:
http://tools.vevb.com/jisuanqi/jsq
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินงาน Java Dom", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน