Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import ser.Solver;
- import java.util.Scanner;
- public class Main {
- /**
- * Функция, которая меняет строку так, чтобы случаи с
- * унарным минусом или же числом без оператора перед
- * скобкой не были для нас чем-то неожиданным
- *
- * @param expr - строка с выражением
- * @return String - обработанная строка
- */
- private static String getFixed(String expr) {
- String result = expr.replaceAll("\\b" + "\\(" + "\\b", "*(");
- result = result.replaceAll("\\b" + "\\)" + "\\b", ")*");
- while(true){
- boolean isChanged = false;
- for(int i = 0 ; i < result.length() && !isChanged;i++){
- char symbol = result.charAt(i);
- if(symbol == '-'){
- boolean isFound = true;
- for(int j = i-1 ; j>= 0; j--){
- if(result.charAt(j) == '('){
- break;
- }
- if(result.charAt(j) >= '0' && result.charAt(j) <= '9' || result.charAt(j) == ')' ){
- isFound = false;
- }
- }
- if(isFound){
- result = result.substring(0,i) + "0" + result.substring(i);
- isChanged = true;
- }
- }
- }
- if (!isChanged) {
- break;
- }
- }
- return result;
- }
- /**
- * Функция, которая меняет строку так, чтобы случаи с
- * унарным минусом или же числом без оператора перед
- * скобкой не были для нас чем-то неожиданным
- *
- * @param expr - строка с выражением
- * @return String - обработанная строка
- */
- private static boolean isCorrect(String expr) {
- int depthLevel = 0;
- for (int i = 0; i < expr.length(); i++) {
- if (expr.charAt(i) == '(') {
- depthLevel++;
- } else if (expr.charAt(i) == ')') {
- depthLevel--;
- }
- }
- if (depthLevel != 0) {
- return false;
- }
- for (int i = 0; i < expr.length(); i++) {
- char symbol = expr.charAt(i);
- if (!(symbol>= '0' && symbol <= '9')) {
- if (symbol != ' ' &&
- symbol != '+' &&
- symbol != '-' &&
- symbol != '*' &&
- symbol != '/' &&
- symbol != '(' &&
- symbol != ')'
- ) {
- return false;
- }
- }
- }
- return true;
- }
- public static void main(String[] args) {
- try {
- Scanner scanner = new Scanner(System.in);
- boolean isGoodInput = false;
- System.out.print("Enter a string: ");
- String str = null;
- while (!isGoodInput) {
- str = scanner.nextLine();
- if (isCorrect(str)) {
- isGoodInput = true;
- } else {
- System.out.println("Your expression is not correct. Try again: ");
- }
- }
- str = getFixed(str);
- Solver solver = new Solver();
- System.out.print(solver.calculate(str));
- } catch (Exception ex) {
- System.out.println(ex.getMessage());
- }
- }
- }
Add Comment
Please, Sign In to add comment