Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Ошибка Unreachable code


Автор: ArtiSoft 21.4.2010, 08:48
Ребята как мне бесит эта ошибка Unreachable code
при таком коде
Код

    public void add()
    {
        mem[4]=0;
        mem[0]=5;
        while(true)
        {
            if ((mem[mem[0]]==0)&&(mem[mem[0]+3]>=mem[254]))
            {
                if ((mem[mem[0]+3]>mem[254])&&(mem[1]<11))
                {
                    while((mem[3]-mem[4]) != 0)
                    {

                    }                
                }

                if ()
                {    

                }
                else
                {

                }

            }
            if ()
            {
                return ;
            }
        }
        painter(); // вот тут ошибка , даже любой правильный оператор написать все равно  
                                    //Unreachable code
    }


А мне нужно именно в этой строке вызвать функцию painter
Пишу в Среде Eclipse
Как избавиться от этого???

Автор: Nofate 21.4.2010, 09:00
Eclipse тут не причем - он дело говорит. =) 
У вас бесконечный цикл перед этим. А ключевое слово return прекратит выполнение метода именно на том месте, где оно использовано. 

Автор: dobrolub 21.4.2010, 09:02
из while(true){} надо выходить как нибудь.

Либо измени условие while( условие ) {}

Либо добавь break;

while(true) { if (условие) break; }

тогда paint() будет 'reachable'


Автор: CrazyDeveloper 21.4.2010, 09:04
Ну и правильно делает что пишет. Этот код действительно не достижим (Unreachable code - это код, который никогда не будет выполнен). У вас цикл, который крутится пока не выполнится условие, проверяемое в строках:

Код

            if ()
            {
                return;
            }


После выполнения этого условия, выполнение метода прекратится и управление вернется в точку программы, из которой был вызван метод add(). Следовательно, метод painter() никогда не вызовется из метода add(). Можно заменить 

Код

            if ()
            {
                return;
            }


на 

Код

            if ()
            {
                break;
            }


Тогда при выполнении условия управление будет перебрасываться на первый оператор после while, а это как раз ваш painter().

Автор: ArtiSoft 21.4.2010, 09:22
вообще то там где операторы if есть условия, но я убрал, я просто показываю структуру
Насчет return я так же подумал, пробовал и без него но все равно это ошибка
А вот условие в while еше не менял

Добавлено через 42 секунды
вообще то там где операторы if есть условия, но я убрал, я просто показываю структуру
Насчет return я так же подумал, пробовал и без него но все равно это ошибка
А вот условие в while еше не менял

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)