2013-04-10 73 views
1

一切似乎运行良好,除了显示的税款始终为0.我无法弄清楚如何正确获取默认或用户条目的计算。这里是我有任何帮助的代码将不胜感激。无法正确显示纳税结果

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace TestApp 
{ 
class Rates 
{ 
    public readonly int incomeLimit; 
    public readonly double lowTax; 
    public readonly double highTax; 

    public Rates() 
    { 
     incomeLimit = 30000; 
     lowTax = .15; 
     highTax = .28; 
    } 
    public Rates(int limit, double lowRate, double highRate) 
    { 
     limit = incomeLimit; 
     lowRate = lowTax; 
     highRate = highTax; 
    } 
    public double CalcTax(double income) 
    {    
     double tax; 
     if (income < incomeLimit) 
     tax = income * lowTax; 
     else 
      tax = income * highTax; 

     return tax; 
    } 
} 
class Taxpayer : IComparable <Taxpayer> 
{ 
    public string social; 
    public double grossincome; 
    public double taxowed; 

    public string SSN 
    { 
     get 
    { 
     return social; 
    } 
     set 
    { 
     social = value; 
    } 
    } 
    public double grossIncome 
    { 
     get 
     { 
      return grossincome; 
     } 
     set 
     { 
      grossincome = value; 
     } 
    } 
    public double taxOwed 
    { 
     get 
     { 
      return taxowed; 
     } 
    } 

    public int CompareTo(Taxpayer o) 
    {   
     return this.taxOwed.CompareTo(o.taxOwed); 
    } 
    public static void getRates() 
    { 
     Rates rates = new Rates(); 
     Taxpayer tax = new Taxpayer(); 

     int limit = 0; 
     double lowRate = 0; 
     double highRate = 0; 
     char input; 
     Console 
      .Write("Do you want default values (enter D) or enter your own (enter O)? "); 
     input = Char.ToUpper(Convert.ToChar(Console.ReadLine())); 

     switch (input) 
     { 
      case 'D': 
       Rates def = new Rates(); 
       limit = def.incomeLimit; 
       lowRate = def.lowTax; 
       highRate = def.highTax; 
       tax.taxowed = def.CalcTax(tax.grossIncome); 
       break; 
      case 'O': 
       Rates own = new Rates(limit, lowRate, highRate); 
       Console.Write("Enter the dollar limit "); 
       limit = Convert.ToInt32(Console.ReadLine()); 
       Console.Write("Enter the low rate "); 
       lowRate = Convert.ToDouble(Console.ReadLine()); 
       Console.Write("Enter the high rate "); 
       highRate = Convert.ToDouble(Console.ReadLine()); 
       tax.taxowed = own.CalcTax(tax.grossIncome); 
       break; 
     } 

    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Taxpayer[] taxarray = new Taxpayer[5]; 

     for (int x = 0; x < taxarray.Length; ++x) 
     { 
      taxarray[x] = new Taxpayer(); 
      Console.Write("Enter Social Security Number for taxpayer {0}: ", x+1); 
      taxarray[x].SSN = Console.ReadLine().Replace("-", ""); 

      Console.Write("Enter gross income for taxpayer {0}: ", x+1); 
      taxarray[x].grossIncome = Convert.ToDouble(Console.ReadLine()); 
      //Taxpayer.getRates(); 
      Taxpayer.getRates(); 
     } 

     Console.WriteLine(); 
     for (int i = 0; i < taxarray.Length; i++) 
     {    
      Console.WriteLine("Taxpayer # {0} SSN: {1} income {2:c} Tax is {3:c}", 
       i+1,taxarray[i].SSN, taxarray[i].grossIncome, taxarray[i].taxOwed); 
     } 

     Console.WriteLine("-------------------------------------------------------"); 
     Array.Sort(taxarray); 
     for (int i = 0; i < taxarray.Length; i++) 
     { 
      Console.WriteLine("Taxpayer # {0} SSN: {1} income {2:c} Tax is {3:c}", 
       i+1,taxarray[i].SSN, taxarray[i].grossIncome, taxarray[i].taxOwed); 
     }    
    } 
} 
} 
+0

你调试了你的代码吗? VS有一个内置的。 – I4V 2013-04-10 20:28:39

+0

@ I4V:他可能是一名初学者程序员。没什么错,大声笑​​... – code4life 2013-04-10 22:08:54

+0

@ code4life所以你说你喜欢阅读文本墙。然后请发表回答,而不是回复评论。 *大声笑.... * – I4V 2013-04-10 22:34:29

回答

1

主要问题似乎是您正在调用静态方法(​​)。您输入的值将存储在该方法中新创建的TaxPayer实例中,但它们永远不会复制到您在数组中创建的实例。

我想你想的是一个实例方法,在你输入回路称呼它:

taxarray[x].getRates(); 

这将需要一些更改​​方法,尤其是具有它使用this引用,而比创建一个新的TaxPayer实例。

+0

谢谢。工作很好。 – Evan 2013-04-11 01:55:12