2013-03-15 58 views
-5

如何用對象創建數組,提示用戶輸入每個對象的數據?我有一些代碼,但得到與不存在的「名稱」C#編程使用對象,數據字段和數組

//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'的第一個參數可以找到(您是否缺少使用指令 或程序集 參考?)C:\ homework \ 300 \ ConsoleApplication11 \ ConsoleApplication1 \ Class1.cs 20 19 ConsoleApplication1

錯誤3「的System.Array」不包含關於「SSN」的定義和沒有 擴展方法「SSN」接受型 「的System.Array」的第一個參數可以找到(是否缺少using指令或程序 組件 參考)C:\作業\ 300 \ ConsoleApplication11 \ ConsoleApplication1 \的Class1.cs 18 19 ConsoleApplication1

錯誤2 '總' 的名稱不在當前上下文 存在C:\作業\ 300 \ ConsoleApplication11 \ ConsoleApplication1 \ Class1.cs 16 42 ConsoleApplication1

錯誤1名稱'SSN'在當前的 con中不存在文本C:\作業\ 300 \ ConsoleApplication11 \ ConsoleApplication1 \的Class1.cs 16 37 ConsoleApplication1

+5

你能發佈你的代碼嗎? – 2013-03-15 03:59:35

+0

你能發佈你有問題的代碼嗎? – Dutts 2013-03-15 03:59:54

+0

給他一個機會來粘貼一些代碼並在倒票前改進問題。 – R0MANARMY 2013-03-15 04:00:41

回答

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,好像他們是在陣列本身的性能,但它們實際上是它的元素的性質。

接下來你有一個問題,因爲Grossdouble類型,但Convert.ToString返回string。您必須將控制檯輸入解析爲double以將其分配給您的財產。

它應該閱讀:

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

由於保羅薩西克回答指出,還有另外一個在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 
+0

對不起,我的第一篇文章和第一個C#課程。希望我能改善自己的活動,以便以最好的方式獲得我期待的幫助。 – 2013-03-15 04:12:00

+0

@pswg:毛重是雙倍。你不能給它分配一個字符串。 – 2013-03-15 04:12:52

+0

我糾正了這個錯誤,它應該閱讀ToDouble,謝謝 – 2013-03-15 04:14:03

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; 
     } 
    } 
} 
+0

查看最新的編輯。它應該是't [x] .Gross',因爲你正在通過索引從數組中獲取對象。格羅斯是毫無意義的。 – 2013-03-15 04:21:47

+0

t是一個數組,它沒有Gross屬性。 t [x]是數組中的第x個納稅人,並具有Gross屬性。但我不確定你將如何接受WriteLine語句中的輸入 – failedprogramming 2013-03-15 04:22:21

+0

我看到你使用了自動實現功能。我原來使用它,但不知道。 – 2013-03-15 04:27:20