Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package theaddingcalculator;
- import java.util.Scanner;
- public class Addingcalculator {
- private int number1;
- private int number2;
- private char operation;
- Addingcalculator(int number1, char operation, int number2) {
- this.number1 = number1;
- this.number2 = number2;
- this.operation = operation;
- }
- Addingcalculator() {
- Scanner scan = new Scanner(System.in);
- System.out.println("Write operation: ");
- String separatedInput = separateAddingCalculatorInput(scan.nextLine());
- this.number1 = Integer.valueOf(separatedInput.substring(0, separatedInput.indexOf(' ')));
- this.operation = separatedInput.charAt(separatedInput.indexOf(' ') + 1);
- this.number2 = Integer.valueOf(separatedInput.substring(separatedInput.lastIndexOf(' ') + 1));
- }
- private String separateAddingCalculatorInput(String scanLine) {
- String separatedLine = "";
- boolean sign = false;
- separatedLine += scanLine.charAt(0);
- for (int i = 1; i < scanLine.length(); i++) {
- if (sign == false && (scanLine.charAt(i) == '+' || scanLine.charAt(i) == '-' || scanLine.charAt(i) == '*'
- || scanLine.charAt(i) == '/' || scanLine.charAt(i) == '^')) {
- separatedLine += " " + scanLine.charAt(i) + " ";
- sign = true;
- } else if (sign == false && scanLine.charAt(i) != ' ') {
- separatedLine += scanLine.charAt(i);
- } else if (sign == true && scanLine.charAt(i) != ' ') {
- separatedLine += scanLine.charAt(i);
- }
- }
- return separatedLine;
- }
- private int negate(int number) {
- int negateNumber = Integer.MIN_VALUE;
- while (number + negateNumber != 0) {
- negateNumber++;
- }
- return negateNumber;
- }
- private int adding() {
- return this.number1 + this.number2;
- }
- private int subtraction() {
- return this.number1 + negate(this.number2);
- }
- private int multiply() {
- int result = 0;
- int signNumber1 = 0;
- int signNumber2 = 0;
- if (this.number2 < 0) {
- signNumber2 = negate(this.number2);
- } else {
- signNumber2 = this.number2;
- }
- if (this.number1 < 0) {
- signNumber1 = negate(this.number1);
- } else {
- signNumber1 = this.number1;
- }
- for (int i = 0; i < signNumber2; i++) {
- result += signNumber1;
- ;
- }
- if (multiplySignChecker())
- return result;
- else
- return negate(result);
- }
- private boolean multiplySignChecker() {
- if ((this.number1 > 0 && this.number2 > 0) || (this.number1 < 0 && this.number2 < 0)) {
- return true;
- } else {
- return false;
- }
- }
- private boolean divideIntegerResultChecker() {
- if ((this.number1 > 0 && this.number1 < this.number2)
- || (this.number1 < 0 && negate(this.number1) < this.number2)) {
- System.out.println("Non-integral answer");
- return false;
- } else if (this.number1 == 0 && this.number2 == 0) {
- System.out.println("Not-defined");
- return false;
- } else if (this.number2 == 0) {
- System.out.println("Divide by 0 error!");
- return false;
- } else {
- if ((this.number1 > 0 && divide()[0] == this.number1)
- || (this.number1 < 0 && divide()[0] == negate(this.number1)))
- return true;
- else
- System.out.println("Non-integral answer");
- return false;
- }
- }
- private int[] divide() {
- int[] helper = new int[2]; //idk how to return two int so i do this kind of darkmagic
- int signNumber1 = 0;
- int signNumber2 = 0;
- if (this.number2 < 0) {
- signNumber2 = negate(this.number2);
- } else {
- signNumber2 = this.number2;
- }
- if (this.number1 < 0) {
- signNumber1 = negate(this.number1);
- } else {
- signNumber1 = this.number1;
- }
- while (helper[0] < signNumber1) {
- helper[0] += signNumber2;
- helper[1]++;
- }
- if (!multiplySignChecker())
- helper[1] = negate(helper[1]);
- return helper;
- }
- private boolean exponentationIntegerResultChecker() {
- if (this.number2 < 0) {
- System.out.println("Non-integral answer");
- return false;
- } else {
- return true;
- }
- }
- private int exponentation() {
- int result;
- int signNumber1 = 0;
- if (this.number2 == 0) {
- result = 1;
- } else {
- if (this.number1 < 0) {
- signNumber1 = negate(this.number1);
- } else {
- signNumber1 = this.number1;
- }
- result = signNumber1;
- int multiplier = 0;
- for (int i = 1; i < this.number2; i++) {
- for (int j = 0; j < signNumber1; j++) {
- multiplier += result;
- }
- result = multiplier;
- multiplier = 0;
- }
- }
- if (evenExponentChecker() || this.number1 > 0)
- return result;
- else
- return negate(result);
- }
- public boolean evenExponentChecker() {
- int helper = 0;
- for (int i = 0; i <= this.number2; i += 2)
- helper = this.number2 + negate(i);
- if (helper == 0) {
- return true;
- } else {
- return false;
- }
- }
- public void signCollector() {
- int result = 0;
- boolean error = false;
- switch (this.operation) {
- case '+':
- result = adding();
- break;
- case '-':
- result = subtraction();
- break;
- case '*':
- result = multiply();
- break;
- case '/':
- if (divideIntegerResultChecker())
- result = divide()[1];
- else
- error = true;
- break;
- case '^':
- if (exponentationIntegerResultChecker())
- result = exponentation();
- else
- error = true;
- break;
- default:
- System.out.println("Sign of operation is not recognized");
- break;
- }
- if (!error)
- System.out.println(this.number1 + " " + this.operation + " " + this.number2 + " = " + result);
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Addingcalculator calc = new Addingcalculator();
- calc.signCollector();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement