2016-08-04 1 views
-5

У меня есть цикл, который итерации равен длине массива, внутри этого цикла у меня есть метод, который выполняет некоторую обработку и имеет структуру if-else внутри. Я хочу, чтобы, если какое-то условие истинно, повторите итерацию по всему циклу. Минимальный рабочий код.return int from in statement в цикле в java

for(int xx=0;xx<temp.length;xx++) 
    { 
    rule=temp[xx][1]; 
    cons=temp[xx][2]; 
    fp.factprocess(fact, rule, vars, cons); 
    } 

содержание fp.factprocess, как

if(condition==true) 
    make xx = 0 in the parent loop 
else 
continue 

я не знаю, как я это делаю, я использовал оператор возврата, но оно должно быть в конце концов, и не может быть в If- блок.

+0

ОК .... спасибо за обмен. – specializt

+1

[Что такое проблема XY?] (Http://meta.stackexchange.com/a/66378) – flakes

ответ

3

Верните булеву из теста состояния. Если boolean true, установите xx в -1 (чтобы быть увеличенным до 0) в цикле.

for(int xx=0;xx<temp.length;xx++) 
    { 
    rule=temp[xx][1]; 
    cons=temp[xx][2]; 
    boolean setXXtoZero = fp.factprocess(fact, rule, vars, cons); 
    if(setXXtoZero) xx=-1; 

    } 

fp.factprocess:

return condition; 
+1

, вы можете переписать эту последнюю часть как: 'return condition;' – Stultuske

1

Да, в блоке if может быть оператор return.

public int getValue(int val){ 
    if (value == 5){ 
    return value; 
    } 
    else{ 
    return 6; 
    } 
} 

например, действительный код Java.

public int getValue(int input){ 
    if (input == 5){ 
    return input; 
    } 
} 

с другой стороны, это не так, так как вы ничего не возвращается, если вход не равен 5, но метод должен возвращать либо Int или выбросить исключение.

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

+0

Спасибо, я дам вам попробовать и обновить вас, нужно ли ему возвращаться во всех возможных сценариях? поскольку я не хочу возвращать что-либо в блоке else –

+0

, вы должны либо что-то вернуть, либо выбросить исключение для прерывания метода. лучше всего вернуть значение – Stultuske

1

Если вы хотите изменить переменную xx цикла, я предлагаю вернуть логическое значение в вашем методе factprocess.

for (int xx = 0; xx < temp.length; xx++) { 
    rule = temp[xx][1]; 
    cons = temp[xx][2]; 
    boolean shouldRestart = fp.factprocess(fact, rule, vars, cons); 
    if (shouldRestart) { 
    xx = 0; 
    } 
} 
1

Pass xx в factprocess() и назначить возвращение к xx

for(int xx=0;xx<temp.length;xx++) 
    { 
    rule=temp[xx][1]; 
    cons=temp[xx][2]; 
    xx = fp.factprocess(fact, rule, vars, cons, xx); 
    } 

Внутри factprocces()

if (condition == true) { 
    return 0 
} else { 
    return xx 
}