最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

简单的JAVA四则运算

来源:动视网 责编:小OO 时间:2025-10-01 02:03:04
文档

简单的JAVA四则运算

packagearrays.myArray;importjava.util.Scanner;publicclassSortObject{privatestaticintintercePosition=0;//记录单个运算数据的长度privatestaticint[]intercePositionIndex=null;//记录“(”的下标privatestaticint[]intercePositionEnd=null;//记录“)”的下标publicstaticvoidmain(String[
推荐度:
导读packagearrays.myArray;importjava.util.Scanner;publicclassSortObject{privatestaticintintercePosition=0;//记录单个运算数据的长度privatestaticint[]intercePositionIndex=null;//记录“(”的下标privatestaticint[]intercePositionEnd=null;//记录“)”的下标publicstaticvoidmain(String[
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 ('(' == numberString[i]) {

    // 记录最后一个正括号的位置

    IndexStart = i;

   }

   if (')' == numberString[i]) {

    // 记录反括号的最初始下标的位置

    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 (stringOperation[i] == a || stringOperation[i] == 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("" + stringOperation[i], 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+/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 < stringOperation.length; i++) {

   switch (stringOperation[i]) {

   case '*':

   case '/':

   case '+':

   case '-':

    InrerceIndex = i;

    if (i != 0) // 判断该数是否为负数

     ispas = true;

    break;

   default:

    break;

   }

   if (ispas)

    break;

  }

  // 判断此数据是否在运算字符串的最后一位

  if (InrerceIndex == 0) {

   a = Double.parseDouble(str);

   intercePosition = str.length();

   if (ispas)

    intercePosition++;

  } else {

   a = Double.parseDouble(str.substring(0, InrerceIndex));

   // 记录数据的真实长度

   intercePosition = str.substring(0, InrerceIndex).length();

  }

  return a;

 }

 // 截取第一个数

 private static double interceptNumIndex(String str) {

  double a = 0; // 记录数据

  int InrerceIndex = 0; // 记录运算符的位置

  boolean temp = false; // 记录数据前运算符的状态

  char[] stringOperation = str.toCharArray();

for (int i = stringOperation.length - 1; i >= 0; i--) {

   switch (stringOperation[i]) {

   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 ('(' == IsString[i])

    num1++;

   if (')' == IsString[i])

    num2++;

   // 判断除数是否为零

   if ('/' == IsString[i] && IsString[i + 1] == '0')

    operationIspass = false;

   // 判断是否输入了运算符合

   if (IsString[i] == '+' || IsString[i] == '-' || IsString[i] == '*'

     || IsString[i] == '/')

    ai++;

   if (i == IsString.length - 1)

    if (ai == 0)

     num2++;

  }

  if (operationIspass)

   if (num1 == num2)

    ispass = true;

  return ispass;

 }

}

文档

简单的JAVA四则运算

packagearrays.myArray;importjava.util.Scanner;publicclassSortObject{privatestaticintintercePosition=0;//记录单个运算数据的长度privatestaticint[]intercePositionIndex=null;//记录“(”的下标privatestaticint[]intercePositionEnd=null;//记录“)”的下标publicstaticvoidmain(String[
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top