Advertisement
kubabebe

The Adding Calculator

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