219k views
1 vote
Separating calculations into methods simplifies modifying and expanding programs.

The following program calculates the tax rate and tax to pay, using methods. One method returns a tax rate based on an annual salary.
Run the program below with annual salaries of 40000, 60000, and 0.
Change the program to use a method to input the annual salary.
Run the program again with the same annual salaries as above. Are results the same?
This is the code including what I am working on added. I will not run. I need to remove some areas to designate the scanner as the source of input but I am unsure of which area.
import java.util.Scanner;
public class IncomeTax {
// Method to get a value from one table based on a range in the other table
public static double getCorrespondingTableValue(int search, int [] baseTable, double [] valueTable) {
int baseTableLength = baseTable.length;
double value = 0.0;
int i = 0;
boolean keepLooking = true;
i = 0;
while ((i < baseTableLength) && keepLooking) {
if (search <= baseTable[i]) {
value = valueTable[i];
keepLooking = false;
}
else {
++i;
}
}
return value;
}
public static void readInput(int salaryOne, int salaryTwo, int salaryThree);
annualSalary = 0;
Scanner scnr = new Scanner(System.in);
scnr nextInt();
new annualSalary;
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in);
int annualSalary = 0;
double taxRate = 0.0;
int taxToPay = 0;
int i = 0;
int [] salaryBase = { 20000, 50000, 100000, 999999999 };
double [] taxBase = { .10, .20, .30, .40 };
// FIXME: Change the input to come from a method
System.out.println("\\Enter annual salary (0 to exit): ");
annualSalary = scnr.nextInt();
while (annualSalary > 0) {
taxRate = getCorrespondingTableValue(annualSalary, salaryBase, taxBase);
taxToPay= (int)(annualSalary * taxRate); // Truncate tax to an integer amount
System.out.println("Annual salary: " + annualSalary +
"\tTax rate: " + taxRate +
"\tTax to pay: " + taxToPay);
// Get the next annual salary
// FIXME: Change the input to come from a method
System.out.println("\\Enter annual salary (0 to exit): ");
annualSalary = scnr.nextInt();
}
return;
}
}

User Abuzeid
by
4.8k points

1 Answer

5 votes

Answer: Provided in the explanation section

Step-by-step explanation:

Programs:

IncomeTax.java

import java.util.Scanner;

public class IncomeTax {

// Method to get a value from one table based on a range in the other table

public static double getCorrespondingTableValue(int search, int [] baseTable, double [] valueTable) {

int baseTableLength = baseTable.length;

double value = 0.0;

int i = 0;

boolean keepLooking = true;

i = 0;

while ((i < baseTableLength) && keepLooking) {

if (search <= baseTable[i]) {

value = valueTable[i];

keepLooking = false;

}

else {

++i;

}

}

return value;

}

public static int readInput(Scanner scan){

System.out.println("\\Enter annual salary (0 to exit): ");

int annualSalary = scan.nextInt();

return annualSalary;

}

public static void main (String [] args) {

Scanner scnr = new Scanner(System.in);

int annualSalary = 0;

double taxRate = 0.0;

int taxToPay = 0;

int [] salaryBase = { 20000, 50000, 100000, 999999999 };

double [] taxBase = { .10, .20, .30, .40 };

// FIXME: Change the input to come from a method

annualSalary = readInput(scnr);

while (annualSalary > 0) {

taxRate = getCorrespondingTableValue(annualSalary, salaryBase, taxBase);

taxToPay= (int)(annualSalary * taxRate); // Truncate tax to an integer amount

System.out.println("Annual salary: " + annualSalary +

"\tTax rate: " + taxRate +

"\tTax to pay: " + taxToPay);

// Get the next annual salary

// FIXME: Change the input to come from a method

annualSalary = readInput(scnr);

}

return;

}

}

Output:

Enter annual salary (0 to exit):

10000

Annual salary: 10000 Tax rate: 0.1 Tax to pay: 1000

Enter annual salary (0 to exit):

50000

Annual salary: 50000 Tax rate: 0.2 Tax to pay: 10000

Enter annual salary (0 to exit):

0

User Shane Daniel
by
4.7k points