kubabebe

The Adding Calculator ver 0.02

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