Чтобы создать класс под названием Calculator, который содержит методы для арифметических c операций - PullRequest
0 голосов
/ 29 мая 2020

Вопрос в том, чтобы создать класс под названием Calculator, который содержит методы для c арифметических операций, таких как сложение, вычитание, умножение и деление. Метод деления должен возвращать Quotient и Remainder (подсказка: используйте параметр out).

Следуйте сигнатурам метода, как указано ниже:

publi c int Addition (int a, int b)

publi c int Вычитание (int a, int b)

publi c int Умножение (int a, int b)

publi c double Division ( int a, int b, двойной остаток). // Метод должен возвращать Quotient, а остаток должен передаваться через параметр out.

Методы должны возвращать соответствующий результат.

Создайте программу класса с главным методом. Запрашивать у пользователя 2 операнда и оператора, вызвать соответствующий метод для работы и отобразить результаты.

Примечание:

Не создавать новое пространство имен.

Создать классы с pubi c спецификатор доступа

Пример ввода

Введите оператор

+

Введите операнды

12

10

Пример вывода

Результат 12 + 10 равен 22 * ​​1037 *

Пример ввода

Введите оператор

/

Введите операнды

11

2

Пример вывода

Результат 11/2: 5

Остаток = 1

Пример ввода

Введите оператор

&

Введите операнды

12

10

Пример вывода

Недействительный оператор

Мой код:

using System;

public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Enter the operator");
        string sign = Console.ReadLine();
        Console.WriteLine("Enter the operands");
        int a = Convert.ToInt32(Console.ReadLine());
        int b = Convert.ToInt32(Console.ReadLine());
        Calculator cal = new Calculator();
        switch (sign)
        {
            case "+":
                Console.WriteLine("Result of " + a + " + " + b + " is " + cal.Addition(a,b));
                break;
            case "-":
                Console.WriteLine("Result of " + a + " - " + b + " is " + cal.Subtraction(a,b));
                break;
            case "*":
                Console.WriteLine("Result of " + a + " * " + b + " is " + cal.Multiplication(a,b));
                break;
            case "/":
                double[] ans = cal.Division(a,b, out remainder);
                Console.WriteLine("Result of " + a + " / " + b + " is " + ans[0]);
                Console.WriteLine("Remainder =" + (int)ans[1]);
                break;
            default:
                Console.WriteLine("Invalid Operator");
                break;
        }
    }

}
internal class Calculator
{
    public virtual int Addition(int a, int b)
    {
        return a + b;
    }
    public virtual int Subtraction(int a, int b)
    {
        return a - b;
    }
    public virtual int Multiplication(int a, int b)
    {
        return a * b;
    }
    public virtual double[] Division(int a, int b,out double remainder)
    {
        return new double[]{a / b, a % b};
    }
}

Ошибка:

Предлагаемая оценка: 0/100 Результат Описание COMPILE TIME ERROR`` Комментарий: = >> CalculatorProgram.cs (25,42): ошибка CS0103: имя remainder' does not exist in the current context CalculatorProgram.cs(50,59): error CS0177: The out parameter остаток 'должно быть присвоено до того, как элемент управления покинет текущий метод. Оценка: = >> 0

1 Ответ

0 голосов
/ 29 мая 2020

Ваша проблема здесь:

public virtual double[] Division(int a, int b,out double remainder)

Давайте посмотрим, что говорит нам эта подпись:

  1. Он называется Division, поэтому он, вероятно, разделит два числа. Какой тип деления не совсем понятно.
  2. Целочисленные аргументы a и b - это вероятно числа, используемые при делении. Но неясно, что является делимым , а что делителем . a - это вероятно первое, а b - вероятно более позднее. ПРАВИЛО: если существует много , вероятно, способов использования данного метода, то что-то не так. Рассмотрите возможность присвоения a и b того, что четко их идентифицирует.
  3. Метод принимает переменную double, передаваемую по ссылке remainder, которая должна быть установлена ​​перед методом Division возвращается (это означает out). Значение - это остаток от операции деления. Но подождите, остаток от деления двух целых чисел всегда является целым числом, зачем объявлять его как double?
  4. Метод возвращает массив double. Хорошо, это не имеет особого смысла. Деление двух чисел - это число, поэтому этот метод должен возвращать double, а не массив чисел типа double. Но подождите ... это тоже не имеет смысла. Если вы возвращаете через параметр out остаток 1043 * от деления двух натуральных чисел, тогда мы выполняем евклидово деление , и поэтому возвращаемое значение должно быть частное деления.
  5. Метод отмечен как виртуальный. Нет очевидной причины, по которой этот метод может быть виртуальным, поэтому не объявляйте его таковым. Всегда помни; сделать не виртуальный метод позже виртуальным намного проще, чем сделать виртуальный метод позже не виртуальным.

При всем этом наша подпись будет выглядеть так: реализация проста:

remainder = .... //remember, the out argument must be initialized before the method returns!
var quotient = ....
return quotient;

Тем не менее, похоже, что проблема указывает, что вы должны использовать следующую подпись, которая не меняет решения:

public double EuclideanDivision(int dividend, int divisor, out double remainder)

Вероятно, вы можете заработать дополнительные баллы в вашем домашнем задании, указывающие на то, что эту подпись можно улучшить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...