-5

オブジェクトを含む配列を作成し、各オブジェクトのデータをユーザーに求めるにはどうすればよいですか? いくつかのコードがありますが、存在しない「名前」でいくつかのエラーが発生します

//Main 
public class TaxPayerDemo
{
    public static void Main()
    {
        Taxpayer[] t = new Taxpayer[10];
        int x;
        for (x = 0; x < t.Length; ++x)
        {
            t[x] = new Taxpayer(SSN, Gross);
            Console.WriteLine("Type your SSN");
            t.SSN = Console.ReadLine();
            Console.WriteLine("Please enter your income");
            t.Gross = Convert.ToString(Console.ReadLine());


        }
    }
    class Taxpayer
    {

        private string ssn;
        private double gross; 
        private double tax;


        public string SSN
        {
            get
            {
                return ssn;

            }
            set
            {
                CalcTax();
            }
        }
        public double Gross
        {
            get
            {
                return gross;

            }
            set
            {
                CalcTax();
            }
        }

        private void CalcTax()
        {
            if (tax < 30000)
            {
                tax = .15 * Gross;
            }
            else
                if (tax > 30000)
                {
                    tax = .28 * Gross;
                }
            }
        }
    }
}

エラー:

エラー 4 'System.Array' には 'Gross' の定義が含まれておらず、タイプ 'System.Array' の最初の引数を受け入れる拡張メソッド 'Gross' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?) C:\homework\300\ConsoleApplication11\ConsoleApplication1\Class1.cs 20 19 ConsoleApplication1

エラー 3 'System.Array' には 'SSN' の定義が含まれておらず、タイプ 'System.Array' の最初の引数を受け入れる拡張メソッド 'SSN' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?) C:\homework\300\ConsoleApplication11\ConsoleApplication1\Class1.cs 18 19 ConsoleApplication1

エラー 2 名前 'Gross' は現在のコンテキストに存在しません C:\homework\300\ConsoleApplication11\ConsoleApplication1\Class1.cs 16 42 ConsoleApplication1

エラー 1 名前 'SSN' は現在のコンテキストに存在しません C:\homework\300\ConsoleApplication11\ConsoleApplication1\Class1.cs 16 37 ConsoleApplication1

4

2 に答える 2

1

エラー 1 と 2 は、このコード行が原因です

t[x] = new Taxpayer(SSN, Gross);

ここで、SSNGrossは、関数内の変数またはTaxPayerDemoクラスのメンバーではありません。

エラー 3 と 4 は、次のコード セクションから発生します。

t.SSN = Console.ReadLine();
Console.WriteLine("Please enter your income");
t.Gross = Convert.ToString(Console.ReadLine());

配列自体のプロパティであるかのようににアクセスしようとしてSSNGrossますが、実際にはその要素のプロパティです。

次にGross、タイプが であるdoubleために問題がありますが、 をConvert.ToString返しますstringdoubleプロパティに割り当てるには、コンソール入力を として解析する必要があります。

それは読むべきです:

t[x] = new Taxpayer();
...
t[x].SSN = Console.ReadLine();
Console.WriteLine("Please enter your income");
t[x].Gross = double.Parse(Console.ReadLine());

Paul Sasik の回答が指摘しているように、この方法には別の方法がありCalcTaxます。あなたの実装は

if (tax < 30000)
...
else if (tax > 30000)

tax == 30000これは、taxがまったく計算されない場合があることを意味します。tax次に、なぜ を使用して計算しようとしているのか疑問に思っていますtax。最初に呼び出した後、値が変わる場合があります。Gross代わりにテストするつもりだと思います。次のようなものをお勧めします。

var rate = (this.Gross < 30000) ? 0.15 : 0.28;
this.tax = rate * this.Gross
于 2013-03-15T04:08:01.327 に答える
1

いくつかの問題がありました。これを試してください: (テストを簡単にするために、配列のサイズを 2 に減らしたことに注意してください。)

using System;

public class TaxPayerDemo
{
    public static void Main()
    {
        Taxpayer[] t = new Taxpayer[2];
        int x;
        for (x = 0; x < t.Length; ++x)
        {
            t[x] = new Taxpayer();//SSN, Gross);
            Console.WriteLine("Type your SSN");
            t[x].SSN = Console.ReadLine();
            Console.WriteLine("Please enter your income");
            t[x].Gross = double.Parse(Console.ReadLine());
        }

        for (x = 0; x < t.Length; ++x)
        {
                            t[x].CalcTax();
            Console.WriteLine(t[x].SSN + " " + t[x].Gross + " " + t[x].Tax);
        }

        Console.ReadKey();
    }
}

class Taxpayer
{
    public double Tax { get; set; }
    public string SSN { get; set; }
    public double Gross { get; set; }

    public void CalcTax()
    {
        if (Gross < 30000)
        {
            Tax = .15 * Gross;
        }
        else if (Gross >= 30000)
        {
            Tax = .28 * Gross;
        }
    }
}
于 2013-03-15T04:11:52.260 に答える