Проблемы с циклическим кодом и циклами do-while (c #) - PullRequest
0 голосов
/ 01 декабря 2018
static double calculateTotals(double a)
    {
        double transfee = a * .01;
        double total = a + transfee;
        return total;
    }

    static void Main(string[] args)
    {
        Console.WriteLine("How many dontations to process?");
        int donations = Convert.ToInt16(Console.ReadLine());
        int[] count = new int[] { donations + 1 };
        int ct = 1;
        int i = -1;
        do
        {
            Console.WriteLine("Enter name: ");
            string name = Console.ReadLine();
            Console.WriteLine("Enter donation amount: ");
            double amount = Convert.ToDouble(Console.ReadLine());
            double transfee = amount * .01;
            i++;
            ct = count[i += 1];
            Console.WriteLine(name + "\t" + amount + "\t" + transfee);
        } while (i < donations);
        Console.WriteLine("TOTALS:" + "\t" + calculateTotals(amount) + "\t" + transfee);
        Console.ReadLine();
    }
}

Привет.Я новичок в кодировании, поэтому прошу прощения, если это неудачная попытка.

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

В настоящее время я не уверен, как правильно реализовать массив в моем цикле, и не уверен, оптимизирован ли цикл в целом.

Опять же, я новичок.Я прошу прощения за такой код, но я хотел бы получить разъяснения по этим вопросам.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Ваш код:

        int i = -1;

        do
        {
            ...

            i++;
            ct = count[i += 1];
            ...

        } while (i < donations);

Вы на самом деле увеличиваете i в два раза , затем получаете значения из счетчика [i], присваивающего ct переменную

См. Этот пример:

        int[] count = new int[3];
        count[0] = 0;
        count[1] = 1;
        count[2] = 2;

        int i = -1;
        do
        {
            i++;
            int x = count[i += 1];
            Console.WriteLine(x);
        } while (i < 3);

Это вызовет IndexOutOfRangeException

Объясните:

Первый цикл:

i++;                   // i increased 1, so i = 0
int x = count[i += 1]; // i increased 1, so i = 1, then get count[1] assign to x, x is 1

Второй цикл:

i++;                   // i increased 1, so i = 2
int x = count[i += 1]; // i increased 1, so i = 3, then get count[3] assign to x

count [3] причина IndexOutOfRangeException

Что-то вроде count [i + = 1] сделает вашкод сложнее поддерживать, на мой взгляд, вам следует избегать его, если это возможно, попробуйте написать его подробно, как можете

0 голосов
/ 01 декабря 2018

Во-первых, ваш синтаксис объявления массива неправильный.См. эту ссылку .

Таким образом, это должно быть int[] count = new int[donations+1];

Во-вторых, вам нужно объявить и создать экземпляр переменных количества и перевода за пределами вашего цикла.

        double transfee = 0.0F;
        double amount = 0.0F;
        do
        {
            ...
            amount = Convert.ToDouble(Console.ReadLine());
            transfee = amount * .01;
            ...
        } while (i < donations);

Этой информации должно быть достаточно, чтобы вы снова пошли.Поскольку вы учитесь, я не думаю, что кто-то действительно развернет для вас ответ, который выполняет работу, которую вы пытаетесь выяснить:)

...