[英]Having trouble with array of objects output
我正在编写此程序,无法显示两个项目。 被赋税变量在每个输出中显示为0,而纳税人编号在输出中也完全不显示...有人可以解释为什么会这样吗?
class Rates
{
private int limit;
private double lowRate;
private double highRate;
public int Limit
{
get
{
return limit;
}
}
public double LowRate
{
get
{
return lowRate;
}
}
public double HighRate
{
get
{
return highRate;
}
}
public void setRates()
{
limit = 30000;
lowRate = 0.15;
highRate = 0.28;
}
public void setRates(int iLimit, double lRate, double hRate)
{
Console.WriteLine("Enter dollar limit: ");
iLimit = Convert.ToInt32(Console.ReadLine());
limit = iLimit;
Console.WriteLine("Enter the low rate: ");
lRate = Convert.ToDouble(Console.ReadLine());
lowRate = lRate;
Console.WriteLine("Enter the high rate: ");
hRate = Convert.ToDouble(Console.ReadLine());
highRate = hRate;
}
public void CalculateTax(int userIncome)
{
if (userIncome < limit)
Console.Write(userIncome * lowRate);
else
Console.Write(userIncome * highRate);
}
}
class TaxPayer : IComparable
{
private String ssn;
private double grossIncome;
private double taxOwed;
public String SSN
{
get
{
return this.ssn;
}
set
{
this.ssn = value;
}
}
public double GrossIncome
{
get
{
return this.grossIncome;
}
set
{
this.grossIncome = value;
}
}
public double TaxOwed
{
get
{
return taxOwed;
}
}
public void CalcTax()
{
Rates firstRate = new Rates();
if (GrossIncome < firstRate.Limit)
taxOwed = GrossIncome * firstRate.LowRate;
else
taxOwed = GrossIncome * firstRate.HighRate;
}
int IComparable.CompareTo(object o)
{
int returnVal;
TaxPayer temp = (TaxPayer)o;
if (this.TaxOwed < temp.TaxOwed)
returnVal = -1;
else
returnVal = 0;
return returnVal;
}
public void getRates()
{
int income = 0;
double lowRate = 0;
double highRate = 0;
int limit = 0;
char userInput;
char upper;
Rates newRates = new Rates();
Console.WriteLine("Do you want default values ('D') or enter your own ('O')? ");
userInput = Convert.ToChar(Console.ReadLine());
upper = char.ToUpper(userInput);
if (upper == 'D')
newRates.setRates();
newRates.CalculateTax(income);
if (upper == 'O')
newRates.setRates(limit, lowRate, highRate);
}
static void Main()
{
TaxPayer[] tpArray = new TaxPayer[5];
int x;
for (x = 0; x < tpArray.Length; ++x)
tpArray[x] = new TaxPayer();
for (x = 0; x < tpArray.Length; ++x)
{
Console.WriteLine("Enter the social scurity number: ");
tpArray[x].SSN = Convert.ToString(Console.ReadLine());
Console.WriteLine("Enter the gross income for the taxpayer: ");
tpArray[x].GrossIncome = Convert.ToDouble(Console.ReadLine());
tpArray[x].getRates();
tpArray[x].CalcTax();
}
for (x = 0; x < tpArray.Length; ++x)
{
Console.WriteLine("Taxpayer # {0} SSN: {1} income {2} and tax owed is {3}", tpArray[x], tpArray[x].SSN,
tpArray[x].GrossIncome, tpArray[x].TaxOwed.ToString("C"));
}
Array.Sort(tpArray);
for (x = 0; x < tpArray.Length; ++x)
{
Console.WriteLine("Taxpayer # {0} SSN: {1} income {2} and tax owed is {3}", tpArray[x], tpArray[x].SSN,
tpArray[x].GrossIncome, tpArray[x].TaxOwed.ToString("C"));
}
Console.ReadLine();
}
}
}
使用调试器,进入此行: tpArray[x].CalcTax();
您会看到问题:您没有使用用户输入的费率,而是创建了一个新的Rates
对象用于计算。
自然,这个新的Rates
对象不会被初始化,并且所有的速率都是零。
另一个问题是,为了输出纳税人编号,您应该输出x
,而不是tpArray[x]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.