Sunday, 28 August 2016

Chapter 8 Exercise 12, Introduction to Java Programming, Tenth Edition Y. Daniel LiangY.

**8.12 (Financial application: compute tax) Rewrite Listing 3.5, ComputeTax.java, using arrays. For each filing status, there are six tax rates. Each rate is applied to a certain amount of taxable income. For example, from the taxable income of $400,000 for a single filer, $8,350 is taxed at 10%, (33,950 - 8,350) at 15%, (82,250 - 33,950) at 25%, (171,550 - 82,550) at 28%, (372,550 - 82,250) at 33%, and (400,000 - 372,950) at 36%. The six rates are the same for all filing statuses, which can be represented in the following array:


double[] rates = {0.10, 0.15, 0.25, 0.28, 0.33, 0.35};
 The brackets for each rate for all the filing statuses can be represented in a two-dimensional array as follows:

int[][] brackets = {
 {8350, 33950, 82250, 171550, 372950}, // Single filer
 {16700, 67900, 137050, 20885, 372950}, // Married jointly
// -or qualifying widow(er)
 {8350, 33950, 68525, 104425, 186475}, // Married separately
 {11950, 45500, 117450, 190200, 372950} // Head of household
};
 Suppose the taxable income is $400,000 for single filers. The tax can be computed as follows:

tax = brackets[0][0] * rates[0] + 
 (brackets[0][1] – brackets[0][0]) * rates[1] + 
 (brackets[0][2] – brackets[0][1]) * rates[2] + 
 (brackets[0][3] – brackets[0][2]) * rates[3] + 
 (brackets[0][4] – brackets[0][3]) * rates[4] + 
 (400000 – brackets[0][4]) * rates[5]; 



import java.util.Scanner;
 
public class ProgrammingEx8_12 {
 public static void main(String[] args) {
  // Create a Scanner
  Scanner input = new Scanner(System.in);
 
  // Prompt the user to enter filing status
  System.out
    .print("(0-single filer, 1-married jointly or qualifying widow(er), "
      + "\n2-married separately, 3-head of household)\n"
      + "Enter the filing status: ");
  int status = input.nextInt();
   
  if(status < 0 || status >3) {
   System.out.println("Error: invalid status");
   System.exit(1);
  }
 
  // Prompt the user to enter taxable income
  System.out.print("Enter the taxable income: ");
  double income = input.nextDouble();
 
  double[] rates = { 0.10, 0.15, 0.25, 0.28, 0.33, 0.35 };
  int[][] brackets = { { 8350, 33950, 82250, 171550, 372950 }, // Single filer
    { 16700, 67900, 137050, 20885, 372950 }, // Married jointly or qualifying widow(er)
    { 8350, 33950, 68525, 104425, 186475 }, // Married separately
    { 11950, 45500, 117450, 190200, 372950 } // Head of household
  };
 
  // Compute tax
  double tax = 0;
   
   if (income <= brackets[status][0])
    tax = income * 0.10;
   else if (income <= brackets[status][1])
    tax = 8350 * 0.10 + (income - 8350) * 0.15;
   else if (income <= brackets[status][2])
    tax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (income - 33950)
      * 0.25;
   else if (income <= brackets[status][3])
    tax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (82250 - 33950)
      * 0.25 + (income - 82250) * 0.28;
   else if (income <= brackets[status][4])
    tax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (82250 - 33950)
      * 0.25 + (171550 - 82250) * 0.28 + (income - 171550)
      * 0.33;
   else
    tax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (82250 - 33950)
      * 0.25 + (171550 - 82250) * 0.28 + (372950 - 171550)
      * 0.33 + (income - 372950) * 0.35;
  
 
  // Display the result
  System.out.println("Tax is " + (int) (tax * 100) / 100.0);
 }
}

No comments :

Post a Comment