При использовании вложенных циклов for оператор if ожидает завершения цикла, прежде чем продолжить работу с оператором if? - PullRequest
0 голосов
/ 06 октября 2019

Когда я запускаю код, программа не будет присваивать значение j элементу массива в [i + 1].

Я не понимаю, что не так с программой, но я считаю, что программадобавив значение j, когда его цикл завершен, к серии [i + 1], я не знаю почему. Я ожидал, что программа присвоит значение j серии [i + 1], как только будет выполнено «утверждение if».

final int size = 100;
int series[] = new int[size];
series[0] = 0;
series[1] = 0;
for(int i = 1; i < size - 1; i++){
    for(int j = 1; j <= i; j++){
        if(series[i] == series[i - j]){
            series[i + 1] = j;
        }else{
            series[i + 1] = 0;
        }
    }
}
System.out.println(Arrays.toString(series));

Фактические результаты: [0, 0, 1, 0, 3, 0, 5, 0, 7, 0, 9, 0, 11, 0, 13, 0, 15, 0, 17, 0, 19, 0, 21, 0, 23, 0,25, 0, 27, 0, 29, 0, 31, 0, 33, 0, 35, 0, 37, 0, 39, 0, 41, 0, 43, 0, 45, 0, 47, 0, 49, 0, 51, 0, 53, 0, 55, 0, 57, 0, 59, 0, 61, 0, 63, 0, 65, 0, 67, 0, 69, 0, 71, 0, 73,0, 75, 0, 77, 0, 79, 0, 81, 0, 83, 0, 85, 0, 87, 0, 89, 0, 91, 0, 93, 0, 95, 0, 97, 0]

Ожидаемые результаты: [0,0,1,0,2,0,2,2,1,6,0,5,0,2,6,...] также известен как последовательность Ван Эка.

1 Ответ

0 голосов
/ 06 октября 2019

Вам необходимо остановить внутренний цикл после первого выполнения условия if, т.е.

for(int i = 1; i < size - 1; i++){
    for(int j = 1; j <= i; j++){
        if(series[i] == series[i - j]){
            series[i + 1] = j;
            break;
        }else{
            series[i + 1] = 0;
        }
    }
}

В противном случае вы перезаписываете правильные значения.

...