2015-06-05 3 views
1

упрощено, я в принципе есть, если подобное заявление:Java, повторите Если заявление, если условие было ложным

if(A[random]==1) 
    A[random]=0; 
else 
    continue; 

Теперь я знаю «продолжить» для операторов цикла, и это не будет работать, но Я хотел что-то после else, если бы действительно другое (в основном это было ложное) было активировано, оно повторило первое, если (A [random] == 1) утверждение.

+5

Возможно, вы ищете 'while (! Condition)'? – Wormbo

+2

Каким будет условие завершения этого? Должен ли он заканчиваться после 'A [random] == 1'? – JPeroutek

+0

Да, это разрешено заканчивать, когда он находит бит в массиве, который равен 1, и после того, как он изменит его на 0, if должен остановиться. И с утверждением while, он остановится, если он найдет бит, равный 0, и ничего не изменит –

ответ

1

Вы можете попробовать ниже рекурсии кода и посмотреть, если это устранить в ваш запрос

public class Test { 


public void continueIf(){ 
    if(A[random]==1) 
     A[random]=0; 
    else { 
     continueIf(); 
    } 
} 

public static void main(String[] args) { 
    new Test().continueIf(); 
} 
} 

Пожалуйста, обратите внимание, если, если условие не удовлетворяет, то это приведет к stackoverflowerror. Это тоже зависит от размера памяти JVM. проверьте это link для получения дополнительной информации о ошибке stackoverflow.

+0

Пожалуйста, исправьте меня, если я ошибаюсь, но этот метод приведет к 'StackOverflowException' , Он нуждается в 'return;', и даже тогда логика глючит. –

+0

Я тестировал его, и IT WORKED это результат, который я хотел, спасибо pase –

+0

@MirandaCode, как сказал @drewkennedy, если ваше условие if не удовлетворяет, то это может привести к 'java.lang.StackoverflowError'. – pise

7

Вы можете использовать while заявление вместо:

while (A[random] != 1) { 
    A[random] = 0; 
    // generate a new random... 
} 
+0

Моя проблема с этим подходом заключается в том, что я хочу, чтобы он менял только один бит в массиве от 1 до 0, и если случайно выбранный бит равен 0, он ничего не изменит –

+2

@Mureinik OP должен быть остановлен, когда A [random] == 1 удовлетворен. Ваш код делает обратный. Он должен быть A [random]! = 1. – aa1992

+0

@ aa1992 настоял, действительно. Получил '==' вместо '! ='. Исправлена. – Mureinik

1

Оператор if/Else не будет работать сам по себе, перейдя через массив. Я предлагаю вставить его в цикл For или цикл While. Цикл будет искать массив, а оператор if/else проверяет индекс для предоставленного условия. Я бы тоже избавился от другого. Вам действительно не нужна эта часть, только если.

для цикла в самом простом примере будет выглядеть примерно так:

for(var i = 0; i < SIZE; i++) 
     { 
      if (A[i] == 1) 
       A[i] = 0; 
     } 

SIZE будет размер вашего массива

+0

Мне нужно, чтобы случайным образом выбрать значение из массива A ... с учетом этого я не могу реализовать его в цикле for и иметь A [i], как-то поражает цель –

1
random = ...; // get first random number 
while (A[random] != 1) { 
    random = ...; // get new random number 
} 
A[random] = 0; // now is 1, switch it to 0 
1

Это должно work.The другие ответы описали время и рекурсия, так что я также добавляю цикл while while.

do{ 
    //generate the random number 
    }while(A[random]!=1)//The loop iterates till the condition A[random]!=1 is satisfied 
    A[random]==0;//changing the bit to 0 

Пожалуйста, обратите внимание, что если нет в массиве нет bit =1, то это решение не потому, что вы создаете индексы в случайном порядке. Итак, если массив не имеет element =1, он постоянно проверяет индексы и генерирует infinite loop.

Надеюсь, что это поможет. Счастливое кодирование !!

+0

Хотя это правильно, этот ответ выиграл бы объясняя, почему цикл 'do ... while' будет решать проблему OP вместо того, чтобы включать только фрагмент кода. – JNYRanger

+0

@JNYRanger добавленный информация. – aa1992

Смежные вопросы