You are to design a Java application to carry out additions and subtractions for numbers of any length. A number is represented as an object which includes a sign and two strings for the whole and decimal parts of the number. And, the operations must be done by adding or subtracting characters directly. You are not allowed to convert these strings to numbers before the operation.

The program must use a "Number" class which includes at least the following methods:

Number ( );

Number (double n);

Number add (Number RHS);

Number subtract (Number RHS);

String toString ( );

This is what i have but it only adds positive numbers and it doesn't subtract problems like 7.05-8.96. Also some of it was what our teacher gave us like alignwhole method

import java.util.Scanner; public class Number{ private String whole; private String decimal; private String sign; public static void main (String[] args){ System.out.println("Enter two numbers"); Scanner keyboard = new Scanner(System.in); Double firstNumber = keyboard.nextDouble(); Double secondNumber = keyboard.nextDouble(); Number x = new Number (firstNumber); Number y = new Number (secondNumber); Number sum = x.add(y); System.out.println ("x = " + x); System.out.println ("y = " + y); System.out.println("x + y = " + sum); Number subtract = x.Subtract(y); System.out.println("x - y = " + subtract); } public Number(){ whole = "0"; decimal = "0"; sign = "+"; } public Number (double n){ whole = "0"; decimal = "0"; sign = "+"; String temp = new Double(n).toString(); if (temp.charAt(0) == '-'){ sign = "-"; temp = temp.substring(1); } int pos = temp.indexOf("."); if (pos == -1) whole = temp; else { whole = temp.substring (0,pos); decimal = temp.substring (pos+1); } } public Number add (Number RHS){ this.alignWhole (RHS); this.alignDecimal (RHS); return this.addNum (RHS); } private void alignWhole (Number RHS){ int firstWholeL = this.whole.length(); int secondWholeL = RHS.whole.length(); int dif = firstWholeL - secondWholeL; if (dif > 0){ for (int i = 1; i <= dif; i++) RHS.whole = "0" + RHS.whole; } else if (dif < 0) { dif = Math.abs (dif); for (int i = 1; i <= dif; i++) this.whole = "0" + this.whole; } } private void alignDecimal (Number RHS) { int firstDecimalL = this.decimal.length ( ); int secondDecimalL = RHS.decimal.length ( ); int dif = firstDecimalL - secondDecimalL; if (dif > 0) { for (int i = 1; i <= dif; i++) RHS.decimal = RHS.decimal + "0"; } else if (dif < 0) { dif = Math.abs (dif); for (int i = 1; i <= dif; i++) this.decimal = this.decimal + "0"; } } private Number addNum (Number RHS){ Number sum = new Number(); sum.decimal = ""; int carry = 0; int decimalL = this.decimal.length(); for (int i = decimalL -1; i >= 0; i--) { char firstC = this.decimal.charAt(i); char secondC = RHS.decimal.charAt(i); int sumX = (firstC - 48) + (secondC - 48) + carry; char sumC = (char)((sumX % 10) + 48); carry = sumX / 10; sum.decimal = sumC + sum.decimal; } sum.whole = ""; int wholeL = this.whole.length(); for (int i = wholeL -1; i >= 0; i--) { char firstC = this.whole.charAt (i); char secondC = RHS.whole.charAt (i); int sumX = (firstC - 48) + (secondC - 48) + carry; char sumC = (char)((sumX % 10) + 48); carry = sumX / 10; sum.whole = sumC + sum.whole; } if (carry != 0) sum.whole = "1" + sum.whole; return sum; } public Number Subtract (Number RHS){ this.SubtractalignWhole (RHS); this.SubtractalignDecimal (RHS); return this.subNum (RHS); } private void SubtractalignWhole (Number RHS){ int firstWholeL = this.whole.length(); int secondWholeL = RHS.whole.length(); int dif = firstWholeL - secondWholeL; if (dif > 0){ for (int i = 1; i <= dif; i++) RHS.whole = "0" + RHS.whole; } else if (dif < 0) { dif = Math.abs (dif); for (int i = 1; i <= dif; i++) this.whole = "0" + this.whole; } } private void SubtractalignDecimal (Number RHS) { int firstDecimalL = this.decimal.length ( ); int secondDecimalL = RHS.decimal.length ( ); int dif = firstDecimalL - secondDecimalL; if (dif > 0) { for (int i = 1; i <= dif; i++) RHS.decimal = RHS.decimal + "0"; } else if (dif < 0) { dif = Math.abs (dif); for (int i = 1; i <= dif; i++) this.decimal = this.decimal + "0"; } } private Number subNum (Number RHS){ Number subtract = new Number(); subtract.decimal = ""; int carry = 0; int decimalL = this.decimal.length(); for (int i = decimalL -1; i >= 0; i--) { char firstC = this.decimal.charAt(i); char secondC = RHS.decimal.charAt(i); int sumX = (firstC - 48) - (secondC - 48) + carry; char sumC = (char)((sumX % 10) + 48); carry = sumX / 10; subtract.decimal = sumC + subtract.decimal; } subtract.whole = ""; int wholeL = this.whole.length(); for (int i = wholeL -1; i >= 0; i--) { char firstC = this.whole.charAt (i); char secondC = RHS.whole.charAt (i); int sumX = (firstC - 48) - (secondC - 48) + carry; char sumC = (char)((sumX % 10) + 48); carry = sumX / 10; subtract.whole = sumC + subtract.whole; } if (carry != 0) subtract.whole = "1" + subtract.whole; return subtract; } public String toString() { return sign + whole + "." + decimal; } }