none
Ошибки: Не все ветви кода возвращают значения, локальным переменным не присвоено значение. RRS feed

  • Вопрос

  • Создал метод. в нем 3 вложенных условия. Вот 1 из них:
     if (Mn_nas > 0 && Mn_nas < 5)
                {
                    del = 0.0114 * Mn_nas;
                }
                else
                {
                    if (Mn_nas > 5 && Mn_nas < 10)
                    {
                        del = 0.057 + 0.023 * (Mn_nas - 5);
                    }
                    else
                    {
                        if (Mn_nas > 10 && Mn_nas < 25)
                        {
                            del = 0.0171 + 0.031 * (Mn_nas - 10);
                        }
                        else
                        {
                            if (Mn_nas > 25 && Mn_nas < 45)
                            {
                                del = 0.643 + 0.045 * (Mn_nas - 25);
                            }
                            else
                            {
                                if (Mn_nas > 45 && Mn_nas < 75)
                                {
                                    del = 1.539 + 0.058 * (Mn_nas - 45);
                                    
                                }
                                else
                                {
                                    if (Mn_nas > 75 && Mn_nas < 85)
                                    {
                                        del = 3.286 + 0.100 * (Mn_nas - 75);
                                    }
                                }
                            }
                        }
                    }
                }
    В итоге переменная  del не определена и не все ветви кода возвращают значение. тоже и с остальными 2.
     В чем проблема?
    • Перемещено Abolmasov Dmitry 27 января 2012 г. 11:24 (От:Настольные ПК)
    15 декабря 2011 г. 12:14

Ответы

  • > В итоге переменная del не определена и не все ветви кода возвращают значение. тоже и с остальными 2.
     
     
    скорее всего требуется <= и >=, вместо < и >.
    например, следующий код ничего не выводит из-за < и >.
     
    var x = 5;
    if (x > 0 && x < 5)
      System.Diagnostics.Trace.WriteLine("1");
    else
        if (x > 5 && x < 10)
            System.Diagnostics.Trace.WriteLine("2");
    
    
     
    • Помечено в качестве ответа Abolmasov Dmitry 21 декабря 2011 г. 9:34
    15 декабря 2011 г. 14:39
  • Проинициализируй переменные например вот так:

     

    double x, an = 0, m, Gpl, a, Y, G1, Rgr_pl, Mnd = 0, A, B, bnpl, Mnd_t, del = 0, Rn_pl, a1, b1, Mn_nas, sig;

     


    И посмотри на сигнатуру своей функции:

    public static double Ras_cv_nevti_v_plas(double ppl, double Tpl, double Rnd, double G, double Pnas, double Rgo, out double Mn_pl)

    Она у тебя возвращает значение double, а у тебя ни одного return во всей функции

    Добавь в код возврат значения, либо поменяй возвращаемый тип на void


    19 декабря 2011 г. 6:58

Все ответы

  • > В итоге переменная del не определена и не все ветви кода возвращают значение. тоже и с остальными 2.
     
     
    скорее всего требуется <= и >=, вместо < и >.
    например, следующий код ничего не выводит из-за < и >.
     
    var x = 5;
    if (x > 0 && x < 5)
      System.Diagnostics.Trace.WriteLine("1");
    else
        if (x > 5 && x < 10)
            System.Diagnostics.Trace.WriteLine("2");
    
    
     
    • Помечено в качестве ответа Abolmasov Dmitry 21 декабря 2011 г. 9:34
    15 декабря 2011 г. 14:39
  • попробовал, не помогло.  ''ошибка неопределения переменной'' возникает после условия при использовании этой переменной. А ''не все  ветви кода воз...'' для всего метода. скидываю весь метод:

     

    public static double Ras_cv_nevti_v_plas(double ppl, double Tpl, double Rnd, double G, double Pnas, double Rgo, out double Mn_pl)

            {

                double x, an, m, Gpl, a, Y, G1, Rgr_pl, Mnd, A, B, bnpl, Mnd_t, del, Rn_pl, a1, b1, Mn_nas, sig;

                m = 1 + 0.029 * (Tpl - 293) * (Rnd * Rgo * 1e-3 - 0.7966);

                Gpl = G * m;

                a = 1 + 0.0054 * (Tpl - 293);

                Rgr_pl = a * m * Rgo * G / Gpl;

                Y = 1e-3 * (4.3 - 3.54 * 1e-3 * Rnd + 1.0337 * Rgr_pl / a + 5.581 * 1e-6 * Rnd * (1 - 1.61 * 1e-6 * Rnd * Gpl) * Gpl);

                if ((Rnd >= 780) && (Rnd <= 860))

                {

                    an = 1e-3 * (3.083 - 2.638 * 1e-3 * Rnd);

                }

                if ((Rnd > 860) && (Rnd <= 960))

                {

                    an = 1e-3 * (2.513 - 1.975 * 1e-3 * Rnd);

                }

                bnpl = 1 + (1.0733 * 1e-3 * Rnd * Y * Gpl) / m + an * (Tpl - 293) - 6.5 * 1e-4 * ppl;  \\ Здесь неопределена an

                Rn_pl = Rnd * (1 + 1.293 * 1e-3 * Rgr_pl * Gpl / (m * a)) / bnpl;

     

                if ((Rnd > 845) && (Rnd < 924))

                {

                    x = (0.658 * Rnd * Rnd) / (866 * 1e3 - Rnd * Rnd);

                    Mnd = Math.Pow(x, 2);

                }

                if (780 < Rnd && Rnd <= 845)

                {

                    x = (0.456 * Rnd * Rnd) / (833 * 1e3 - Rnd * Rnd);

                    Mnd = Math.Pow(x, 2);

                }

                a1 = Math.Pow(10, (-0.0175 * (293 - Tpl) - 2.58));

                b1 = (8 * 1e-5 * Rnd - 0.047) * Math.Pow(Mnd, 0.13 + 0.002 * (Tpl - 293));   \\Здесь неопределена Mnd

                Mnd_t = Mnd * Math.Pow(Tpl - 293, a1) * Math.Exp(b1 * (293 - Tpl));

                G1 = 1.055 * 1e-3 * (1 + 5 * an) * G * Rnd;

                A = 1 + 0.0129 * G1 - 0.0364 * Math.Pow(G1, 0.85);

                B = 1 + 0.0017 * G1 - 0.0228 * Math.Pow(G1, 0.667);

                Mn_nas = A * Math.Pow(Mnd_t, B);

                if (Mn_nas > 0 && Mn_nas < 5)

                {

                    del = 0.0114 * Mn_nas;

                }

                else

                {

                    if (Mn_nas > 5 && Mn_nas < 10)

                    {

                        del = 0.057 + 0.023 * (Mn_nas - 5);

                    }

                    else

                    {

                        if (Mn_nas > 10 && Mn_nas < 25)

                        {

                            del = 0.0171 + 0.031 * (Mn_nas - 10);

                        }

                        else

                        {

                            if (Mn_nas > 25 && Mn_nas < 45)

                            {

                                del = 0.643 + 0.045 * (Mn_nas - 25);

                            }

                            else

                            {

                                if (Mn_nas > 45 && Mn_nas < 75)

                                {

                                    del = 1.539 + 0.058 * (Mn_nas - 45);

     

                                }

                                else

                                {

                                    if (Mn_nas > 75 && Mn_nas < 85)

                                    {

                                        del = 3.286 + 0.100 * (Mn_nas - 75);

                                    }

                                }

                            }

                        }

                    }

                }

                Mn_pl = Mn_nas + del * (ppl - Pnas); \\ Здесь неопределена del

                sig = Math.Pow(10, -(1.58 + 0.05 * ppl) - 72 * 1e-6 * (Tpl - 305));

            }

     

    Интересно что при добавлении в условие еще 1 ветви else и присвоении неопр-м переменным любого числа проблема исчезает. А вот  с  ''не все  ветви кода воз...'' даже нет вариантов как решить

     

    15 декабря 2011 г. 15:29
  • Проинициализируй переменные например вот так:

     

    double x, an = 0, m, Gpl, a, Y, G1, Rgr_pl, Mnd = 0, A, B, bnpl, Mnd_t, del = 0, Rn_pl, a1, b1, Mn_nas, sig;

     


    И посмотри на сигнатуру своей функции:

    public static double Ras_cv_nevti_v_plas(double ppl, double Tpl, double Rnd, double G, double Pnas, double Rgo, out double Mn_pl)

    Она у тебя возвращает значение double, а у тебя ни одного return во всей функции

    Добавь в код возврат значения, либо поменяй возвращаемый тип на void


    19 декабря 2011 г. 6:58
  • Создал метод. в нем 3 вложенных условия. Вот 1 из них:
    ..........................
    В итоге переменная  del не определена и не все ветви кода возвращают значение. тоже и с остальными 2.
     В чем проблема?

    А вы подумали, чему будет равно del при Mn_nas >= 85 или  Mn_nas <= 0 ?
    19 декабря 2011 г. 8:35