Advertisement
kubabebe

The Adding Calculator ver 0.03

Sep 22nd, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.07 KB | None | 0 0
  1. package theaddingcalculator;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.List;
  6. import java.util.Scanner;
  7.  
  8. public class Addingcalculator {
  9.     final List<Character> operationSign = Arrays.asList('+', '-', '/', '*', '^');
  10.     private int number1;
  11.     private int number2;
  12.     private char operation;
  13.  
  14.     Addingcalculator(int number1, char operation, int number2) {
  15.         this.number1 = number1;
  16.         this.number2 = number2;
  17.         this.operation = operation;
  18.     }
  19.  
  20.     Addingcalculator() {
  21.         Scanner scan = new Scanner(System.in);
  22.         System.out.println("Write operation: ");
  23.         String separatedInput = addingCalculatorInputFormat(scan.nextLine());
  24.         this.number1 = Integer.valueOf(separatedInput.substring(0, separatedInput.indexOf(' ')));
  25.         this.operation = separatedInput.charAt(separatedInput.indexOf(' ') + 1);
  26.         this.number2 = Integer.valueOf(separatedInput.substring(separatedInput.lastIndexOf(' ') + 1));
  27.     }
  28.  
  29.     private String addingCalculatorInputFormat(String scanLine) {
  30.         String separatedLine = "";
  31.         boolean sign = false;
  32.  
  33.         separatedLine += scanLine.charAt(0);
  34.         for (int i = 1; i < scanLine.length(); i++) {
  35.             if (!sign && operationSign.contains(scanLine.charAt(i))) {
  36.                 separatedLine += " " + scanLine.charAt(i) + " ";
  37.                 sign = true;
  38.             } else if (!sign && scanLine.charAt(i) != ' ') {
  39.                 separatedLine += scanLine.charAt(i);
  40.             } else if (sign && scanLine.charAt(i) != ' ') {
  41.                 separatedLine += scanLine.charAt(i);
  42.             }
  43.  
  44.         }
  45.         return separatedLine;
  46.     }
  47.  
  48.     // private int Math.negateExact(int number) {
  49.     // int Math.negateExactNumber = Integer.MIN_VALUE;
  50.     // while (number + Math.negateExactNumber != 0) {
  51.     // Math.negateExactNumber++;
  52.     // }
  53.     // return Math.negateExactNumber;
  54.     // }
  55.  
  56.     private int adding(int number1, int number2) {
  57.         return number1 + number2;
  58.     }
  59.  
  60.     private int subtraction(int number1, int number2) {
  61.         return number1 + Math.negateExact(number2);
  62.     }
  63.  
  64.     private int multiply(int number1, int number2) {
  65.         int result = 0;
  66.         int signNumber1 = 0;
  67.         int signNumber2 = 0;
  68.         if (number2 < 0) {
  69.             signNumber2 = Math.negateExact(number2);
  70.         } else {
  71.             signNumber2 = number2;
  72.         }
  73.         if (number1 < 0) {
  74.             signNumber1 = Math.negateExact(number1);
  75.         } else {
  76.             signNumber1 = number1;
  77.         }
  78.         for (int i = 0; i < signNumber2; i++) {
  79.             result += signNumber1;
  80.  
  81.         }
  82.         if (isMultiplyPositive(number1, number2))
  83.             return result;
  84.         else
  85.             return Math.negateExact(result);
  86.  
  87.     }
  88.  
  89.     private boolean isMultiplyPositive(int number1, int number2) {
  90.         return ((number1 > 0 && number2 > 0) || (number1 < 0 && number2 < 0));
  91.  
  92.     }
  93.  
  94.     private boolean isDividePreCalulateInteger(int number1, int number2) {
  95.         if ((number1 > 0 && number1 < number2) || (number1 < 0 && Math.negateExact(number1) < number2)) {
  96.             System.out.println("Non-integral answer");
  97.             return false;
  98.         } else if (number1 == 0 && number2 == 0) {
  99.             System.out.println("Not-defined");
  100.             return false;
  101.         } else if (number2 == 0) {
  102.             System.out.println("Divide by 0 error!");
  103.             return false;
  104.  
  105.         } else {
  106.             if ((number1 > 0 && isDivideInteger(number1, number2) == number1)
  107.                     || (number1 < 0 && isDivideInteger(number1, number2) == Math.negateExact(number1)))
  108.                 return true;
  109.             else
  110.                 System.out.println("Non-integral answer");
  111.             return false;
  112.         }
  113.  
  114.     }
  115.  
  116.     private int isDivideInteger(int number1, int number2) {
  117.  
  118.         return divideHidden(number1, number2, true);
  119.     }
  120.  
  121.     private int divideAnswer(int number1, int number2) {
  122.         return divideHidden(number1, number2, false);
  123.     }
  124.  
  125.     private int divideHidden(int number1, int number2, boolean whichInt) {
  126.         int isInteger = 0;
  127.         int answer = 0;
  128.         int signNumber1 = 0;
  129.         int signNumber2 = 0;
  130.         if (number2 < 0) {
  131.             signNumber2 = Math.negateExact(number2);
  132.         } else {
  133.             signNumber2 = number2;
  134.         }
  135.         if (number1 < 0) {
  136.             signNumber1 = Math.negateExact(number1);
  137.         } else {
  138.             signNumber1 = number1;
  139.         }
  140.         while (isInteger < signNumber1) {
  141.             isInteger += signNumber2;
  142.             answer++;
  143.         }
  144.         if (!isMultiplyPositive(number1, number2))
  145.             answer = Math.negateExact(answer);
  146.         if (whichInt) {
  147.             return isInteger;
  148.         }
  149.         return answer;
  150.     }
  151.  
  152.     private boolean isExponentInteger(int number1, int number2) {
  153.         if (number2 < 0) {
  154.             System.out.println("Non-integral answer");
  155.             return false;
  156.         }
  157.         return true;
  158.  
  159.     }
  160.  
  161.     private int exponentation(int number1, int number2) {
  162.         int result;
  163.         int signNumber1 = 0;
  164.         if (number2 == 0) {
  165.             result = 1;
  166.         } else {
  167.             if (number1 < 0) {
  168.                 signNumber1 = Math.negateExact(number1);
  169.             } else {
  170.                 signNumber1 = number1;
  171.             }
  172.             result = signNumber1;
  173.             int multiplier = 0;
  174.             for (int i = 1; i < number2; i++) {
  175.                 for (int j = 0; j < signNumber1; j++) {
  176.                     multiplier += result;
  177.                 }
  178.                 result = multiplier;
  179.                 multiplier = 0;
  180.             }
  181.         }
  182.         if (isExponentEven(number1, number2) || number1 > 0)
  183.             return result;
  184.         else
  185.             return Math.negateExact(result);
  186.     }
  187.  
  188.     public boolean isExponentEven(int number1, int number2) {
  189.         int helper = 0;
  190.         for (int i = 0; i <= number2; i += 2)
  191.  
  192.             helper = number2 + Math.negateExact(i);
  193.  
  194.         return helper == 0;
  195.  
  196.     }
  197.  
  198.     public void calculation(int number1, char operation, int number2) {
  199.         int result = 0;
  200.         boolean error = false;
  201.         switch (operation) {
  202.         case '+':
  203.             result = adding(number1, number2);
  204.             break;
  205.         case '-':
  206.             result = subtraction(number1, number2);
  207.             break;
  208.         case '*':
  209.             result = multiply(number1, number2);
  210.             break;
  211.         case '/':
  212.             if (isDividePreCalulateInteger(number1, number2))
  213.                 result = divideAnswer(number1, number2);
  214.             else
  215.                 error = true;
  216.             break;
  217.         case '^':
  218.             if (isExponentInteger(number1, number2))
  219.                 result = exponentation(number1, number2);
  220.             else
  221.                 error = true;
  222.             break;
  223.         default:
  224.             System.out.println("Sign of operation is not recognized");
  225.             break;
  226.  
  227.         }
  228.         if (!error)
  229.             System.out.println(number1 + " " + operation + " " + number2 + " = " + result);
  230.     }
  231.  
  232.     public static void main(String[] args) {
  233.         // TODO Auto-generated method stub
  234.         Addingcalculator calc = new Addingcalculator();
  235.         calc.calculation(calc.number1, calc.operation, calc.number2);
  236.     }
  237.  
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement