Von einem Aufruf einer Methode zur Berechnung eines TaxAmount kann nur $ 0 abgerufen werden
Ich habe Probleme mit dem folgenden Aufruf, insbesondere mit der letzten Komponente:
<code>Console.WriteLine("Taxpayer # {0} SSN: {1}, Income is {2:c}, Tax is {3:c}", i + 1, taxArray[i].SSN, taxArray[i].grossIncome, taxRates.CalculateTax(taxArray[i].grossIncome)); </code>
Ich rufe die CalculateTax-Methode in der Rates-Klasse auf, die als taxRates in main eingeleitet wurde.
Hier ist die CalculateTax-Methode
<code>public int CalculateTax(int income) { int taxOwed; // If income is less than the limit then return the tax as income times low rate. if (income < incLimit){ taxOwed = Convert.ToInt32(income * lowTaxRate); } // If income is greater than or equal to the limit then return the tax as income times high rate. else if(income >= incLimit) { taxOwed = Convert.ToInt32(income * highTaxRate);} else taxOwed = 0; return taxOwed; } </code>
incLimit, lowTaxRate und highTaxRate wurden zuvor festgelegt
Irgendwelche Ideen, warum dies immer auf 0 herauskommt. Ich habe der Methode sogar eine Nummer wie 50000 gesendet und trotzdem 0 zurückbekommen.
Ich kann einen Wert nur mit der Methode selbst erhalten, es ist also etwas anderes, hier ist der Code
<code>using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Assignment5_2 { public class Rates { // Create a class named rates that has the following data members: int incLimit; double lowTaxRate; double highTaxRate; // use read-only accessor public int IncomeLimit { get { return incLimit; } } public double LowTaxRate { get { return lowTaxRate; } } public double HighTaxRate { get { return highTaxRate; } } //A class constructor that assigns default values public void assignRates() { //int limit = 30000; //double lowRate = .15; //double highRate = .28; incLimit = 30000; lowTaxRate = .15; highTaxRate = .28; } //A class constructor that takes three parameters to assign input values for limit, low rate and high rate. public void assignRates(int lim, double low, double high) { incLimit = lim; lowTaxRate = low; highTaxRate = high; } // A CalculateTax method that takes an income parameter and computes the tax as follows: public int CalculateTax(int income) { int taxOwed; // If income is less than the limit then return the tax as income times low rate. if (income < incLimit) taxOwed = Convert.ToInt32(income * lowTaxRate); // If income is greater than or equal to the limit then return the tax as income times high rate. else taxOwed = Convert.ToInt32(income * highTaxRate); Console.WriteLine(taxOwed); return taxOwed; } } //end class Rates // Create a class named Taxpayer that has the following data members: public class Taxpayer : IComparable { //Use get and set accessors. string SSN { set; get; } int grossIncome { set; get; } int taxOwed { set; get; } int IComparable.CompareTo(Object o) { int returnVal; Taxpayer temp = (Taxpayer)o; if (this.taxOwed > temp.taxOwed) returnVal = 1; else if (this.taxOwed < temp.taxOwed) returnVal = -1; else returnVal = 0; return returnVal; } // End IComparable.CompareTo public static void GetRates() { // Local method data members for income limit, low rate and high rate. int incLimit; double lowRate; double highRate; string userInput; Rates rates = new Rates(); // Prompt the user to enter a selection for either default settings or user input of settings. Console.Write("Would you like the default values (D) or would you like to enter the values (E)?: "); /* If the user selects default the default values you will instantiate a rates object using the default constructor * and set the Taxpayer class data member for tax equal to the value returned from calling the rates object CalculateTax method.*/ userInput = (Console.ReadLine()); if (userInput == "D" || userInput == "d") { rates.assignRates(); } // end if /* If the user selects to enter the rates data then prompt the user to enter values for income limit, low rate and high rate, * instantiate a rates object using the three-argument constructor passing those three entries as the constructor arguments and * set the Taxpayer class data member for tax equal to the valuereturned from calling the rates object CalculateTax method. */ else if (userInput == "E" || userInput == "e") { Console.Write("Please enter the income limit: "); incLimit = Convert.ToInt32(Console.ReadLine()); Console.Write("Please enter the low rate: "); lowRate = Convert.ToDouble(Console.ReadLine()); Console.Write("Please enter the high rate: "); highRate = Convert.ToDouble(Console.ReadLine()); //Rates rates = new Rates(); rates.assignRates(incLimit, lowRate, highRate); } else Console.WriteLine("You made an incorrect choice"); } static void Main(string[] args) { Taxpayer[] taxArray = new Taxpayer[5]; Rates taxRates = new Rates(); // Implement a for-loop that will prompt the user to enter the Social Security Number and gross income. for (int x = 0; x < taxArray.Length; ++x) { taxArray[x] = new Taxpayer(); Console.Write("Please enter the Social Security Number for taxpayer {0}: ", x + 1); taxArray[x].SSN = Console.ReadLine(); Console.Write("Please enter the gross income for taxpayer {0}: ", x + 1); taxArray[x].grossIncome = Convert.ToInt32(Console.ReadLine()); } Taxpayer.GetRates(); // Implement a for-loop that will display each object as formatted taxpayer SSN, income and calculated tax. for (int i = 0; i < taxArray.Length; ++i) { Console.WriteLine("Taxpayer # {0} SSN: {1}, Income is {2:c}, Tax is {3:c}", i + 1, taxArray[i].SSN, taxArray[i].grossIncome, taxRates.CalculateTax(50000));//taxRates.CalculateTax(taxArray[i].grossIncome)); } // end for // Implement a for-loop that will sort the five objects in order by the amount of tax owed Array.Sort(taxArray); Console.WriteLine("Sorted by tax owed"); for (int i = 0; i < taxArray.Length; ++i) { Console.WriteLine("Taxpayer # {0} SSN: {1}, Income is {2:c}, Tax is {3:c}", i + 1, taxArray[i].SSN, taxArray[i].grossIncome, taxRates.CalculateTax(taxArray[i].grossIncome)); } } //end main } // end Taxpayer class } //end </code>