Sanlover

Main.java

Nov 21st, 2021 (edited)
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.77 KB | None | 0 0
  1. package com.company;
  2. import ser.Solver;
  3. import java.util.Scanner;
  4.  
  5.  
  6. public class Main {
  7.     /**
  8.      * Функция, которая меняет строку так, чтобы случаи с
  9.      * унарным минусом или же числом без оператора перед
  10.      * скобкой не были для нас чем-то неожиданным
  11.      *
  12.      * @param expr - строка с выражением
  13.      * @return String - обработанная строка
  14.      */
  15.     private static String getFixed(String expr) {
  16.         String result = expr.replaceAll("\\b" + "\\(" + "\\b", "*(");
  17.         result = result.replaceAll("\\b" + "\\)" + "\\b", ")*");
  18.  
  19.         while(true){
  20.             boolean isChanged = false;
  21.             for(int i = 0 ; i < result.length() && !isChanged;i++){
  22.                 char symbol = result.charAt(i);
  23.                 if(symbol == '-'){
  24.                     boolean isFound = true;
  25.                     for(int j = i-1 ; j>= 0; j--){
  26.                         if(result.charAt(j) == '('){
  27.                             break;
  28.                         }
  29.                         if(result.charAt(j) >= '0' && result.charAt(j) <= '9' || result.charAt(j) == ')' ){
  30.                             isFound = false;
  31.                         }
  32.                     }
  33.                     if(isFound){
  34.                         result = result.substring(0,i) + "0" + result.substring(i);
  35.                         isChanged = true;
  36.                     }
  37.                 }
  38.             }
  39.             if (!isChanged) {
  40.                 break;
  41.             }
  42.         }
  43.         return result;
  44.     }
  45.  
  46.     /**
  47.      * Функция, которая меняет строку так, чтобы случаи с
  48.      * унарным минусом или же числом без оператора перед
  49.      * скобкой не были для нас чем-то неожиданным
  50.      *
  51.      * @param expr - строка с выражением
  52.      * @return String - обработанная строка
  53.      */
  54.     private static boolean isCorrect(String expr) {
  55.  
  56.         int depthLevel = 0;
  57.         for (int i = 0; i < expr.length(); i++) {
  58.             if (expr.charAt(i) == '(') {
  59.                 depthLevel++;
  60.             } else if (expr.charAt(i) == ')') {
  61.                 depthLevel--;
  62.             }
  63.         }
  64.         if (depthLevel != 0) {
  65.             return false;
  66.         }
  67.         for (int i = 0; i < expr.length(); i++) {
  68.             char symbol = expr.charAt(i);
  69.             if (!(symbol>= '0' && symbol <= '9')) {
  70.                 if (symbol != ' ' &&
  71.                         symbol != '+' &&
  72.                         symbol != '-' &&
  73.                         symbol != '*' &&
  74.                         symbol != '/' &&
  75.                         symbol != '(' &&
  76.                         symbol != ')'
  77.                 ) {
  78.                     return false;
  79.                 }
  80.             }
  81.         }
  82.         return true;
  83.     }
  84.  
  85.     public static void main(String[] args) {
  86.         try {
  87.             Scanner scanner = new Scanner(System.in);
  88.  
  89.             boolean isGoodInput = false;
  90.             System.out.print("Enter a string: ");
  91.             String str = null;
  92.             while (!isGoodInput) {
  93.                 str = scanner.nextLine();
  94.                 if (isCorrect(str)) {
  95.                     isGoodInput = true;
  96.                 } else {
  97.                     System.out.println("Your expression is not correct. Try again: ");
  98.                 }
  99.             }
  100.             str = getFixed(str);
  101.             Solver solver = new Solver();
  102.             System.out.print(solver.calculate(str));
  103.         } catch (Exception ex) {
  104.             System.out.println(ex.getMessage());
  105.         }
  106.  
  107.     }
  108. }
Add Comment
Please, Sign In to add comment