2013-09-28 4 views
0

Как я могу выбрать приращение на для контура в зависимости от булева, я пытаюсь сделать что-то вроде этого:Different приращения на цикл в зависимости от булева

for (int y = iniY; isdown? (y >= endY): (y <= iniY+dy) ; isdown? --y:y++); 

для цикла принимает окончание но не приращение ...

рабочий код, который я в настоящее время есть что-то вроде этого:

if(isdown) 
     for (int y = iniY; y >= endY; --y) { 
      code lines... 
     } 
    else 
     for (int y = iniY; y <= iniY+dy; ++y) { 
      code lines... 
     } 

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

+0

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

+0

Что случилось с текущим кодом? – Aaron

+0

@Aaron Как бы вы отлаживали эту строку кода: 'for (int y = iniY; isdown? (Y> = endY): (y <= iniY + dy); isdown? -y: y ++);' –

ответ

1

Как и решение minitech, но без ветки внутри петли.

int end = isdown ? iniY - endY : dy; 
int direction = isdown ? -1 : +1; 

for(int i = 0; i <= end; i++) { 
    int y = iniY + direction * i; 
    … 
} 
0
for(initialization;condition; increment/decrement){} 

Если condition часть for петли не удалась, то increment часть не будет работать.

+0

Я не понимаю, вы имеете в виду: for (int y = iniY; isdown? (Y> = endY): (y <= iniY + dy); - y/y ++); –

0

Я хотел бы сделать это:

int end = isdown ? iniY - endY : dy; 

for(int i = 0; i <= end; i++) { 
    int y = isdown ? iniY - i : iniY + i; 
    … 
} 

То есть, выяснить разницу и петлю над этим. Это легче понять.

0

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