c#将纳税人类数据成员设置为另一个方法



我是c#的新手,我很困惑如何设置数据成员,然后用不同的方法计算税。下面是这部分程序应该做的:

"如果用户选择默认默认值,您将使用默认构造函数实例化一个rates对象,并将tax的Taxpayer类数据成员设置为调用rates对象CalculateTax方法返回的值。"

-我有一个开关语句调用默认构造函数,如果他们选择'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();
    }

    }
    }

如果有任何帮助,我将不胜感激。

我不明白为什么您要重新创建一个您拥有所有值的对象。下面是另一种模式,static presets + factory

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

dummy只是为了让代码区分你的两个不同的函数。

在switch语句中,只需调用rates(bool dummy)函数而不是另一个。对于假人,指定它为真或假,谁在乎....它看起来像这样。

switch (entry)  //set switch
{
    case'D':
        rates();
        break;
    case'O':
        rates(true)
        break;
    default:
        Console.WriteLine("Invalid input");
        goto getRates();
}

你的代码有更多的问题,但你必须修改它,我们才能进一步帮助你。你应该尝试在VS中使用它,因为编辑器可以通过给你特定的错误来帮助你解决问题。

最新更新