2016-12-05 5 views
0

Я понимаю, что этот калькулятор можно написать намного проще, чем то, что я написал, но я хочу понять причину, по которой он не работает с Properties так, как я его написал. Я читал в книге, что я мог бы опустить «набор», но у меня появилось больше ошибок, когда я это делал. Я получаю также ошибку основного метода. Любая помощь будет оценена по достоинству. Линия 1 (CS5001), 9 (CS5113) и 26 (CS0161).Простой калькулятор C# с свойствами

using System; 

namespace Calculator 
{ 
class Program 
{ 
    public static void Main(string[] args) 

    { 

    public int number01; 
    public int number02; 
    public int Number03 

    { 
     get 

     { 
      return number02/number01; 
     } 
    } 

    class Program1 : Program 
    { 

     public int DivideFinal() 
     { 

      Console.Write("Enter a number to be divided: "); 
      Console.ReadKey(); 
      number01 = Convert.ToInt32(Console.ReadKey()); 
      Console.WriteLine("Enter another number to be divided"); 
      number02 = Convert.ToInt32(Console.ReadKey()); 
      Console.WriteLine("The result is: " + Number03); 
      Console.ReadKey(); 
     } 

}

} 

}

+5

Из того, что я вижу, вашему свойству 'Number03' требуется еще одна закрывающая скобка после' get' accessor. – ThePerplexedOne

+0

Спасибо, я исправил это. – CoadA

+0

Посмотрите на 'double', целочисленное деление не особенно полезно. Что будет напечатано, если вы сделали 10/3? – Equalsk

ответ

3

Вы оставили две закрывающие фигурные скобки и утверждал, функция возвращает int, который на самом деле ничего не возвращает. Это помогает либо исправить одну вещь за раз - и на самом деле попытаться написать только небольшой код за раз, скомпилировав, как вы идете. Если вы не видите, что не так, комментируйте большие куски и постарайтесь, чтобы ваш код аккуратно выстроился в линию, чтобы вы могли видеть, где вы, возможно, пропустили скобу или подобное.

using System; 

namespace Calculator 
{ 
    class Program 
    { 
     public static void Main(string[] args) 
     { 

     }//<----------- 

     public int number01; 
     public int number02; 
     public int Number03 
     { 
      get 
      { 
       return number02/number01; 
      } 
     }//<---------- 

     class Program1 : Program 
     { 

      public void DivideFinal()//<---- void not int 
      { 
       Console.Write("Enter a number to be divided: "); 
       Console.ReadKey(); 
       number01 = Convert.ToInt32(Console.ReadKey()); 
       Console.WriteLine("Enter another number to be divided"); 
       number02 = Convert.ToInt32(Console.ReadKey()); 
       Console.WriteLine("The result is: " + Number03); 
       Console.ReadKey(); 
      } 
     } 

    } 
} 

справа - теперь у нас есть это составление давайте посмотрим на суть того, что у вас есть.

namespace Calculator 
{ 
    class Program 
    { 
     public static void Main(string[] args) 
     { 
     } 
    } 
} 

У вас есть класс с именем Program в пространстве имен с ожидаемым static void Main точки входа. Он ничего не делает, поэтому, когда вы его запускаете, ничего не произойдет. Если вы запустите его в отладчике, вы можете напечатать «Нажмите любую клавишу, чтобы продолжить».

Если вы хотите, чтобы что-то произошло, ему нужен код в вашей точке входа - эта функция Main по умолчанию.

Вы добавили свойства данного класса, которые вы не используете. Вы начали писать еще один класс: Program1внутри этот класс, который также наследуется от этого класса.

Рассмотрите возможность называть его Calculator, так как это то, что вы собираетесь писать. Это не нужно наследовать от вашего основного класса - они не связаны. Очень просто сделать новый класс в новом файле.

Запустите новый класс и добавьте свойства и другие методы, такие как DivideFinal. (? Кстати, почему ты назвал его DivideFinal)

namespace Calculator 
{ 
    class Calculator 
    { 
     public int number01; 
     public int number02; 
     public int Number03 
     { 
      get 
      { 
       return number02/number01; 
      } 
     } 

     public void DivideFinal() 
     { 
      Console.Write("Enter a number to be divided: "); 
      Console.ReadKey(); 
      number01 = Convert.ToInt32(Console.ReadKey()); 
      Console.WriteLine("Enter another number to be divided"); 
      number02 = Convert.ToInt32(Console.ReadKey()); 
      Console.WriteLine("The result is: " + Number03); 
      Console.ReadKey(); 
     } 
    } 
} 

Наконец, давайте сделаем основную функцию сделать что-то:

public static void Main(string[] args) 
    { 
     var calculator = new Calculator(); 
     calculator.DivideFinal(); 
    } 

Это приведет к некоторым ошибкам, которые мы можем иметь дело с в другом вопрос. Например, Convert.ToInt32 ожидания String, но вы даете ему результат Console.ReadKey который не является строкой. Вместо этого вы можете рассмотреть Console.ReadLine(): например, question.

+0

Спасибо @doctorlove. Я сделал исправления, но я все еще получаю ошибку компилятора CS5001 (Нет действительного основного метода для точки входа). – CoadA

+0

Если вы сохраните этот файл как Program.cs, он должен работать. Или вы изменяете свойства приложения (щелкните правой кнопкой мыши по проекту и перейдите к свойствам) и выберите объект запуска. Каков ваш файл cs, сохраненный как? Что такое начальный объект? – doctorlove

+0

@Equalsk - как только мы скомпилируем его, я могу вернуться и прокомментировать структуру. – doctorlove