问题描述
|
我对C#还是很陌生,对如何设置数据成员然后使用另一种方法计算税收感到困惑。这是程序的这一部分应该做的:
\“如果用户选择默认的默认值,则将使用默认构造函数实例化费率对象,并将Taxtaxer类数据成员的税额设置为等于调用费率对象CalculateTax方法返回的值。
-我有一个switch语句,如果他们选择\'D \',则要求默认的构造函数,我不确定如何将纳税人类数据设置为默认值,我不确定CalculateTax方法是否正确。
然后如果他们选择\'O \',则执行相同类型的操作
这是我到目前为止的内容:
using System;
interface Icomparable
{
int Compareto(Object o);
}
class rates
{
public double Limit{get;}
public double LowRate{get;}
public double HighRate{get;}
private rates()
{
Limit = 30000;
LowRate = 0.15;
HighRate = 0.28;
}
public rates(double Limit; double LowRate; double HighRate;)
{
Console.Write(\"Enter dollar limit: \");
Limit = Convert.Todouble(Console.ReadLine());
Console.Write(\"Enter the low rate: \");
LowRate = Convert.Todouble(Console.ReadLine());
Console.Write(\"Enter the high rate: \");
HighRate = Convert.Todouble(Console.ReadLine());
}
public CalculateTax()
{
if(Income < Limit)
{TaxOwed = (Income * LowRate)}
else
{TaxOwed = (Income * HighRate)}
}
}
public class taxpayer : IComparable
{
public string SSN{get; set;}
public double Income{get; set;}
public double TaxOwed{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;
}
public getRates()
{
double Limit;
double LowRate;
double HighRate;
Console.WriteLine(\"Do you want default values(enter D) or enter your own (enter O)?\");
entry = Convert.tochar(Console.ReadLine());
switch (entry) //set switch
{
case\'D\':
rates();
break;
case\'O\':
rates(double Limit; double LowRate; double HighRate;)
break;
default:
Console.WriteLine(\"Invalid input\");
goto getRates();
}
}
}
任何帮助,将不胜感激。
解决方法
我不明白为什么要继续重新创建一个具有所有值的对象。
这是备用模式,静态预设+工厂
class Rates
{
public double Limit{get;}
public double LowRate{get;}
public double HighRate{get;}
static readonly Rates default = new Rates(30000,0.15,0.28);
static readonly Rates govna = new Rates(300000,0.1,0.2);
static readonly Rates priest = new Rates(300,0.05,0.07);
public static Rates createRates()
{
double Limit; double LowRate; double HighRate;
Console.Write(\"Enter dollar limit: \");
Limit = Convert.ToDouble(Console.ReadLine());
Console.Write(\"Enter the low rate: \");
LowRate = Convert.ToDouble(Console.ReadLine());
Console.Write(\"Enter the high rate: \");
HighRate = Convert.ToDouble(Console.ReadLine());
return new Rates( Limit,LowRate,HighRate );
}
private Rates(double limit; double lowRate; double highRate;)
{
Limit = limit;
LowRate = lowRate;
HighRate = highRate;
}
public double CalculateTax( double Income)
{
if(Income < Limit)
{return (Income * LowRate)}
else
{return (Income * HighRate)}
}
}
哦,goto怎么了?
while( null == ratesResult ){
Console.WriteLine(\"Do you want default values(enter D) or enter your own (enter O)?\");
entry = Convert.ToChar(Console.ReadLine());
switch (entry) //set switch
{
case\'D\':
ratesResult = Rates.default;
break;
case\'O\':
ratesResult = Rates.createRates();
break;
default:
Console.WriteLine(\"Invalid input\");
}
}
,伙伴,您的代码有很多问题。这里有一些建议可以指导您正确的方向。
在以下属性中,您还应该有一个集合;访问器能够存储这些值。
public double Limit{get;}
public double LowRate{get;}
public double HighRate{get;}
在以下功能中,是否要提示用户输入值?如果是这样,请将第一行从
public rates(double Limit; double LowRate; double HighRate;)
至
public rates(bool dummy)
现在你的代码看起来像
public rates(bool dummy) //Note that dummy is not used in this function. It just distinguishes rates() from rates(bool)
{
Console.Write(\"Enter dollar limit: \");
Limit = Convert.ToDouble(Console.ReadLine());
Console.Write(\"Enter the low rate: \");
LowRate = Convert.ToDouble(Console.ReadLine());
Console.Write(\"Enter the high rate: \");
HighRate = Convert.ToDouble(Console.ReadLine());
}
虚拟对象只是为了让代码区分您的两个不同功能。
在您的switch语句中,只需调用rates(bool dummy)函数即可,而不是另一个函数。对于假人,请为它分配true或false,在乎...。它看起来像下面的样子。
switch (entry) //set switch
{
case\'D\':
rates();
break;
case\'O\':
rates(true)
break;
default:
Console.WriteLine(\"Invalid input\");
goto getRates();
}
您的代码还有更多问题,但是您必须对其进行修改,然后我们才能进一步为您提供帮助。实际上,您应该尝试在VS中使用它,因为编辑器可以通过给您特定的错误来帮助您解决问题。