I wrote a Java coding using Abstraction OOP to calculate federal and state income tax from a salary.
The code is below. `
import java.util.Scanner;
abstract class USA_Tax{
protected final double income_tax = 0.15;
protected double pre_tax_amount;
protected double tax_to_fed;
public void federal_tax(){
Scanner input = new Scanner (System.in);
System.out.println ("Enter pre-tax income: ");
double pre_tax_amount = input.nextDouble();
System.out.println ("Money owned to federal government: ");
tax_to_fed = (double)(pre_tax_amount*0.15);
System.out.println (tax_to_fed);
input.close();
}
}
class California_Tax extends USA_Tax{
protected final double ca_income_tax = 0.10;
protected double after_california_tax;
protected double total_money_left;
public void ca_tax(){
after_california_tax = (double)(pre_tax_amount * ca_income_tax);
System.out.println("Money owned to CA government: " after_california_tax);
total_money_left = (pre_tax_amount) - (after_california_tax tax_to_fed);
System.out.println ("Total take home:" total_money_left);
}
}
public class class_abstraction{
public static void main (String[] args){
California_Tax tax1 = new California_Tax();
tax1.federal_tax();
tax1.ca_tax();
}
}
`
However, when I run the code, only values from the abstract class seem to pop up correctly. The values for the after_california_tax and total_money_left variables in the extended class show up as 0.0. Below is an example output
Enter pre-tax income: 100000 Money owned to federal government: 15000.0 Money owned to CA government: 0.0 Total take home:-15000.0
I also tried to remove 'abstract' from the first class but nothing changed.
Could someone help me understanding what I am doing wrong?
I was expecting correct number outputs. I tried to remove 'abstract' from the first class but nothing changed.
CodePudding user response:
In public void federal_tax()
, you redefine the variable pre_tax_amount
:
double pre_tax_amount = input.nextDouble();
You are thus not using the member variable defined above. You need to assign the value in the already declared variable:
pre_tax_amount = input.nextDouble();
CodePudding user response:
This is where you have messed up, you have created a new local variable which was not required, use the instance variable instead which you have defined.
double pre_tax_amount = input.nextDouble();
Code after the change is done
import java.util.Scanner;
abstract class USA_Tax{
protected final double income_tax = 0.15;
protected double pre_tax_amount;
protected double tax_to_fed;
public void federal_tax(){
Scanner input = new Scanner (System.in);
System.out.println ("Enter pre-tax income: ");
pre_tax_amount = input.nextDouble();
System.out.println ("Money owned to federal government: ");
tax_to_fed = (double)(pre_tax_amount*0.15);
System.out.println (tax_to_fed);
input.close();
}
}
class California_Tax extends USA_Tax{
protected final double ca_income_tax = 0.10;
protected double after_california_tax;
protected double total_money_left;
public void ca_tax(){
after_california_tax = (double)(pre_tax_amount * ca_income_tax);
System.out.println("Money owned to CA government: " after_california_tax);
total_money_left = (pre_tax_amount) - (after_california_tax tax_to_fed);
System.out.println ("Total take home:" total_money_left);
}
}
public class test{
public static void main (String[] args){
California_Tax tax1 = new California_Tax();
tax1.federal_tax();
tax1.ca_tax();
}
}