Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

The question is to: design a Java application to carry out additions and subtrac

ID: 3549534 • Letter: T

Question

The question is 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 ( );

* Explanation: I have done the assignment but i need to add the Number subtract (Number RHS); method to my Number class code but don't know how to without getting an error. If someone could try and adding this and checking it, remember I CAN'T JUST USE THE STRING CONVERSION FOR THIS I HAVE TO FOLLOW THE WAY IT IS DONE FOR THE ADDITION METHOD IN THE NUMBER CLASS!


Here is my code for the Assignment1 code:


Explanation / Answer

This is your program for addition and subtraction, there is but one flaw, subtraction won't work if |y|>|X|.

Rest all is fine.


public class Number

{

private String whole;

private String decimal;

private String sign;



public static void main (String [ ] args)

{

Number x = new Number (121.2324);

Number y = new Number (10.99);

Number sum = x.add (y);

System.out.println(x);

System.out.println(y);

System.out.println ("x = " + x);

System.out.println ("y = " + y);

System.out.println ("sum = " + sum);

Number diff = x.subtract(y);

System.out.println("difference "+diff);

}


public Number(double n){

String thisNum = new Double(n).toString();

if(n>0){

this.sign="+";

this.whole = thisNum.substring(0, thisNum.indexOf("."));

this.decimal = thisNum.substring(thisNum.indexOf(".")+1);

}

else if(n<0){

this.sign="-";

this.whole = thisNum.substring(1, thisNum.indexOf("."));

this.decimal = thisNum.substring(thisNum.indexOf(".")+1);

}



}


public Number ( )

{

whole = "0";

decimal = "0";

sign = "+";

}


public Number add (Number RHS)

{

this.align(RHS);

if(RHS.sign.equals("-")){

return this.subtractNum(RHS);

}

else

return this.addNum(RHS);


}


public Number subtract(Number RHS)

{

this.align(RHS);

if(RHS.sign.equals("-")){

return addNum(RHS);

}

else

return this.subtractNum(RHS);

}


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;


}


private Number align(Number RHS){


int rhsDotPosition = RHS.toString().indexOf(".");

int numDotPosition = this.toString().indexOf(".");


String rhsWhole = RHS.toString().substring(1, rhsDotPosition);

String rhsDecimal = RHS.toString().substring(rhsDotPosition+1);

String numWhole = this.toString().substring(1, numDotPosition);

String numDecimal = this.toString().substring(numDotPosition+1);


int rhsWholeLength = rhsWhole.length();

int rhsDecimalLength = rhsDecimal.length();

int numWholeLength = numWhole.length();

int numDecimalLength = numDecimal.length();


if(rhsWholeLength>numWholeLength){

for(int i=0; i<rhsWholeLength-numWholeLength; i++){

numWhole = "0"+numWhole;

}

this.whole = numWhole;

}

else if(numWholeLength>rhsWholeLength){

for(int i=0; i<numWholeLength-rhsWholeLength; i++){

rhsWhole = "0"+rhsWhole;

}


RHS.whole = rhsWhole;

}

else{

// do nothing

}


if(rhsDecimalLength>numDecimalLength){

for(int i=0; i<rhsDecimalLength-numDecimalLength; i++){

numDecimal = numDecimal+"0";

}


this.decimal = numDecimal;

}

else if(numDecimalLength>rhsDecimalLength){

for(int i=0; i<numDecimalLength-rhsDecimalLength; i++){

rhsDecimal = rhsDecimal+"0";

}

RHS.decimal = rhsDecimal;

}

else{

// do nothing

}

return RHS;


}


private Number subtractNum(Number RHS)

{

Number difference = new Number ( );

difference.decimal = "";

difference.whole = "";

int carry = 0;

for(int i=this.decimal.length()-1;i>=0;i--){

char thisChar = this.decimal.charAt(i);

char rhsChar = RHS.decimal.charAt(i);

int thisLast = (((int)thisChar)-48)+carry;

int rhsLast = ((int)rhsChar)- 48;

if(thisLast<rhsLast){

carry = -1;

thisLast = thisLast+10;

difference.decimal = String.valueOf(thisLast-rhsLast)+difference.decimal;

}

else{

carry = 0;

difference.decimal = String.valueOf(thisLast-rhsLast)+difference.decimal;

}

}

for(int i=this.whole.length()-1;i>=0;i--){

char thisChar = this.whole.charAt(i);

char rhsChar = RHS.whole.charAt(i);

int thisLast = (((int)thisChar)-48)+carry;

int rhsLast = ((int)rhsChar)- 48;

if(thisLast<rhsLast){

carry = -1;

thisLast = thisLast+10;

difference.whole = String.valueOf(thisLast-rhsLast)+difference.whole;

}

else{

carry=0;

difference.whole = String.valueOf(thisLast-rhsLast)+difference.whole;

}

}

return difference;

}


public String toString ( )

{

return sign + whole + "." + decimal;

}

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote