简单的JAVA四则运算.doc_第1页
简单的JAVA四则运算.doc_第2页
简单的JAVA四则运算.doc_第3页
简单的JAVA四则运算.doc_第4页
简单的JAVA四则运算.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

package arrays.myArray;import java.util.Scanner;public class SortObject private static int intercePosition = 0; / 记录单个运算数据的长度 private static int intercePositionIndex = null; / 记录“(”的下标 private static int intercePositionEnd = null; / 记录“)”的下标 public static void main(String args) Scanner input = new Scanner(System.in); do System.out.println(请输入你要计算的字符串(注意:只能输入数字和加,减,乘除符号;输入完毕后,请直接回车):); String numberString = input.next().trim(); / 判断输入的运算字符串是否符合规定 if (ispassString(numberString) = false) System.out.println(您输入的计算字符串有误,请正确输入!); else / 计算结果返回 System.out.println(interceResult(numberString); while (true); / 判断是否有带括号的运算字符串存在 private static String interceResult(String str) String result = str; char numberString = str.toCharArray(); / 1+2+(1*2+1-1*2+5)+2+(1+5+9+10-11)+1*5/2+3 / 1+8-9+(1*8/2-5+(1+2+8)+4/5*8/3*2 int IndexStart = 0; / 记录“(”的实际数量 int EndStart = 0; / 记录“)”的实际数量 for (int i = 0; i numberString.length; i+) if ( = numberStringi) / 记录最后一个正括号的位置 IndexStart = i; if () = numberStringi) / 记录反括号的最初始下标的位置 EndStart = i; / 截取最里面一个括号里的运算字符串 result = result.substring(IndexStart + 1, EndStart); / 截取括号的运算字符串进行运算,生成新的运算字符串 result = str.substring(0, IndexStart) + interceptOperation(result, *, /) + str.substring(EndStart + 1, str.length(); / 回调执行,其它小括号的运算字符串 return interceResult(result); if (i = numberString.length - 1) if (EndStart = 0) break; / 不存在括号了,再进行混合运算 result = interceptOperation(str, *, /); return result; / 不带括号的四则运算 private static String interceptOperation(String operationNumber, char a, char b) String mess = operationNumber; char stringOperation = mess.toCharArray(); / 循环遍历运算字符串,并做相应的运算 for (int i = 0; i stringOperation.length; i+) / 判断运算符所在的索引 if (stringOperationi = a | stringOperationi = b) if (i != 0) / 运算符前的第一个数 double num1 = interceptNumIndex(mess.substring(0, i); / 记录第一个数据的长度 int frontPosition = intercePosition; / 运算符前的第二个数 double num2 = interceptNumEnd(mess.substring(i + 1, stringOperation.length); / 记录第二个数据的长度 int backPosition = intercePosition; / 算完乘除,将结果替换到原来运算的位置,得到新的运算字符串 String IndexMess = mess.substring(0, i - frontPosition + 1); String IndexResult = ; / 判断是否运算到最后的结果了 if (IndexMess.indexOf(+) = -1 & IndexMess.indexOf(*) = -1 & IndexMess.indexOf(/) = -1 & IndexMess.lastIndexOf(-) = -1) IndexMess = ; if (IndexMess != ) IndexResult = IndexMess.lastIndexOf(-) = IndexMess .length() - 1 ? IndexMess.substring(0, i - frontPosition) : IndexMess; / 组装新的运算字符串 mess = IndexResult/ mess.substring(0,i-frontPosition+1) + reslutString( + stringOperationi, num1, num2) + mess.substring(i + backPosition + 1); / 0.111/1212/2/2/2/2/2/2/2 if (mess.lastIndexOf(-) = 0 & mess.indexOf(+) = -1 & mess.indexOf(*) = -1 & mess.indexOf(/) = -1) break; / 回调,继续运算 return interceptOperation(mess, a, b);/ 1+7-5+89/3+4-6*8/2+4-6 else continue; if (i = stringOperation.length - 1) / 递归出口,判断是否还有运算字符串在 if (mess.indexOf(+) != -1 | mess.indexOf(-) != -1) return interceptOperation(mess, +, -); break; return mess; / 截取第二个数 private static double interceptNumEnd(String str) double a = 0; int InrerceIndex = 0; char stringOperation = str.toCharArray(); boolean ispas = false; / 记录是否为负数 for (int i = 0; i = 0; i-) switch (stringOperationi) case *: case /: case +: case -: InrerceIndex = i; temp = true; break; default: break; if (temp) break; / 判断此数据是否在运算字符串的第一位 if (InrerceIndex = 0) a = Double.parseDouble(str); intercePosition = str.length(); / if(temp) / intercePosition+; else a = Double.parseDouble(str.substring(InrerceIndex, str.length(); / 记录数据的真实长度 intercePosition = str.substring(InrerceIndex, str.length() .length(); return a; / 计算结果 private static double reslutString(String operation, double num1, double num2) double sumResult = 0; if (operation.equals(*) sumResult = num1 * num2; if (operation.equals(-) sumResult = num1 - num2; if (operation.equals(/) sumResult = num1 / num2; if (operation.equals(+) sumResult = num1 + num2; return sumResult; / 判断是否正确输入运算方式 private static boolean ispassString(String messString) boolean ispass = false; boolean operationIspass = true; / 记录被除数的状态 int ai = 0; / 记录是否有运算符号的存在 char IsString = messString.toCharArray(); int num1 = 0; int num2 = 0; for (int i = 0; i IsString.length; i+) / 记录有几对小括号的存在 if ( = IsStringi) num1+; if () = IsStringi) num2+; / 判断除数是否为零 if (/ = IsStringi & IsStringi + 1 = 0) ope

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论