2012-04-12 3 views
1

вызов метода в вопросе находится в пределах этого WriteLine вызова в концеВозникли проблемы с вызовом метода и получить правильное значение обратно

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)); 

Вот класс ставки которых метод в

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() 
    { 
     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); 

     return taxOwed; 
    } 

Теперь, если я вставляю значение в следующие переменные, когда они инициализируются, я могу получить возвращаемое значение, но если я оставлю их по умолчанию, я всегда получаю 0 из строки.

int  incLimit; 
double lowTaxRate; 
double highTaxRate; 

На всякий случай вам нужно увидеть что-нибудь еще, вот и все.

У меня тоже есть вопрос о сортировке, я не думаю, что он работает правильно, поскольку мне нужно сортировать по сумме taxOwed, но в настоящее время это 0 и моя проблема.

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() 
    { 
     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); 

     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()); 
      taxArray[x].taxOwed = taxRates.CalculateTax(taxArray[x].grossIncome); 

     } 


     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, taxArray[i]);//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 
+0

я думаю, что у задал этот вопрос http://stackoverflow.com/questions/10116706/cant-get-anything-but-0-from -a-call-to-a-method-to-calculate-a-taxamount/10116729 # 10116729 –

ответ

0

Проблема в том, что вы не вызываете код, устанавливающий ставки по умолчанию. Этот код:

//A class constructor that assigns default values 
public void assignRates() 
{ 
    incLimit = 30000; 
    lowTaxRate = .15; 
    highTaxRate = .28; 
} 

Хотя прокомментированный как «конструктор» не один. Он никогда не вызывается или не запускается. Так как ваш класс называется ставок, вам нужен конструктор по умолчанию, называемый тариф:

public Rates() 
{ 
    // assign the default rates in your constructor 
    assignRates(); 
} 
+0

Я на самом деле немного изменил их, потому что он говорил: «Цены»: имена участников не могут быть такими же, как и их закрывающий тип. – programmerNOOB

+0

Да, имена участников не могут. Таким образом, у вас не может быть метода, называемого тарифами, а именно: public void Rates() {assignRates(); } '. Однако это не то, что мы имеем выше. Поскольку тип возврата не существует («void» в моем примере), это специальный метод, называемый конструктором. Который, по сути, * должен * быть назван таким же, как класс. Не могли бы вы попробуете код выше? – yamen

Смежные вопросы