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("\nEnter 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("\nEnter annual salary (0 to exit): ");
annualSalary = scnr.nextInt();
}
return;
}
}

Respuesta :

Answer: Provided in the explanation section

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("\nEnter 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

ACCESS MORE