2014-10-03 3 views
-1

У меня возникли проблемы с этим приложением, которые мне нужно написать для класса C#. Я получаю ошибку Unhandled Exception. Я знаю, что проблема зависит от program.cs и TaxMath.cs, но я не уверен, куда идти отсюда, и любое руководство будет очень оценено.Налоговая калькуляция проблемы с консолью

Ошибка:

Unhandled Exception: System.FormatException: Index (zero based) must be greater 
 
than or equal to zero and less than the size of the argument list. 
 
    at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String fo 
 
rmat, Object[] args) 
 
    at System.String.Format(IFormatProvider provider, String format, Object[] arg 
 
s) 
 
    at System.IO.TextWriter.WriteLine(String format, Object arg0) 
 
    at System.IO.TextWriter.SyncTextWriter.WriteLine(String format, Object arg0) 
 
    at System.Console.WriteLine(String format, Object arg0) 
 
    at TaxProgram.Program.Main(String[] args) in c:\Users\xxxx\Desktop\ConsoleApp 
 
lication2\Program.cs:line 26

class Program 
 
      { 
 

 
       static void Main(string[] args) 
 
       { 
 
        TaxValues tv = new TaxValues(); 
 

 
        Console.WriteLine("Enter in your income: \r\n"); 
 

 
        double income = Convert.ToDouble(Console.ReadLine()); 
 

 
        Console.WriteLine("Enter in single, marryjointly, marryseperate, or  headohouse to enter in your filing status: \r\n"); 
 

 
        FilingStatus fs = (FilingStatus)Enum.Parse(typeof(FilingStatus), Console.ReadLine()); 
 

 
    (line 24)  Tax TaxOwed = new Tax(tv, fs, income); 
 

 
    (line 26)  Console.WriteLine("Your tax is: {1} \r\n ", TaxOwed.calculate());

class Tax 
 
      { 
 

 
       private TaxValues _taxvalues; 
 
       private FilingStatus _filingstatus; 
 
       double _income; 
 
       
 
       public Tax (TaxValues tv, FilingStatus fs, double income) 
 
       { 
 
    (line 18)  Income = income; 
 
        _taxvalues = tv; 
 
        _filingstatus = fs; 
 

 
       } 
 
        public double Income 
 
        { 
 
         get { return _income; } 
 
         set { 
 
          if (value <= 0) 
 
          { 
 
           throw new ArgumentException(String.Format("{0} must be > 0", value)); 
 
          }  
 
          _income = value; 
 
    (line 32)    calculate(); 
 
         } 
 
        } 
 

 
        private void calculate() 
 
        { 
 
         double TaxOwed = 0.0; 
 

 
         if (_filingstatus == FilingStatus.single) 
 
         { 
 
    (line 42)    if (Income <= _taxvalues.Single10) 
 
           TaxOwed = Income * .1; 
 
          else if (Income <= _taxvalues.Single15) 
 
           TaxOwed = Income * .15; 
 
          else if (Income <= _taxvalues.Single25) 
 
           TaxOwed = Income * .25; 
 
          else if (Income <= _taxvalues.Single28) 
 
           TaxOwed = Income * .28; 
 
          else if (Income <= _taxvalues.Single33) 
 
           TaxOwed = Income * .33; 
 
          else if (Income > _taxvalues.Single33) 
 
           TaxOwed = Income * .35; 
 
          else Console.WriteLine("You dun goofed"); 
 
          .. 
 
          return TaxOwed 0.0

+0

Научитесь прочитайте подробности об исключении. Это имеет значение *, которое * исключение и * какая строка * вызвала его. Затем изолируйте код, который вызывает его, и только отправляйте этот код. Затем узнайте о массивах - ваш код будет намного короче. – Blorgbeard

+0

Возможный дубликат [Что такое исключение NullReferenceException и как его исправить?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – Blorgbeard

+0

У меня нет знаний, чтобы понять этот общий ответ. – donutvamp

ответ

0

Вы выполняете вычисления в вашей собственности:

public double Income 
    { 
     get { return _income; } 
     set 
     { 
      if (value <= 0) 
      { 
       throw new ArgumentException(String.Format("{0} must be > 0", value)); 
      } 
      _income = value; 
      //calculate(); <<ISSUE IS HERE 
     } 
    } 

Изменение подписи вашего метода для возврата двойной:

public double calculate() 
{ 
    double TaxOwed = 0.0; 
    ... 
    return TaxOwed; 
} 

Наконец войти в консоль:

Console.WriteLine("Your tax is: {0} \r\n ", TaxOwed.calculate()); 
+0

Он говорит: «Невозможно преобразовать значение null в double, потому что это тип значения, не равный nullable» – donutvamp

+0

@donutvamp извините, что это была опечатка, вы можете инициализировать 'double TaxOwed = 0.0;' – meda

+0

, теперь не должно быть ошибок. до 0 здесь 'Ваш налог: {0}' – meda

Смежные вопросы