Я могу улучшить этот код, используя делегаты?


Я думаю, я мог бы использовать делегаты. Но я не уверен, если я могу обратиться за ней.

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

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

    private int[] Generate_Fraction(int li1, int ls1, int li2, int ls2)
    {
        int numerator = randomizer.Next(li1, ls1);
        int denominator = randomizer.Next(li2, ls2);

        int[] fraction = new int[2];
        fraction[0] = numerator;
        fraction[1] = denominator;

        return fraction;
    }

    // Decimals
    private double[] GeneratePattern5(double[][] limits)
    {
        double[] decimals = new double[limits.Length];
        for (int i = 0; i < limits.Length; i++)
        {
            bool flag;
            double decTemp;

            do
            {
                flag = false;
                decTemp = GetDoubleBetween(limits[i][0], limits[i][1], (int)limits[i][2]);

                if (Exists(decimals, decTemp, i))
                {
                    flag = true;
                }

            } while (flag);

            decimals[i] = decTemp;
        }

        return decimals;

    }

    // Fractions like: 6/60
    private int[][] GeneratePattern7(int[][] arrayLimits)
    {
        int[][] fractions = new int[arrayLimits.Length][];
        for (int i = 0; i < arrayLimits.Length; i++)
        {
            bool flag;
            int[] fracTemp = new int[2];
            do
            {
                flag = false;
                fracTemp = Generate_Fraction(arrayLimits[i][0], arrayLimits[i][1], arrayLimits[i][2], arrayLimits[i][3]);
                fracTemp[1] *= fracTemp[0];

                if (Exists(fractions, fracTemp, i))
                {
                    flag = true;
                }
            } while (flag);

            fractions[i] = fracTemp;
        }

        return fractions;
    }


363
-2
задан 29 июля 2011 в 09:07 Источник Поделиться
Комментарии
2 ответа

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

        double decTemp;

do
{
decTemp = GetDoubleBetween(limits[i][0], limits[i][1], (int)limits[i][2]);
} while (Exists(decimals, decTemp, i));

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

1
ответ дан 1 августа 2011 в 03:08 Источник Поделиться

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

0
ответ дан 1 августа 2011 в 10:08 Источник Поделиться