Изменить цикл внутри цикла с помощью Matlab - PullRequest
0 голосов
/ 24 августа 2018

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

Мой код работает нормально, однако я не уверен насчет циклов для Year и PartOfYear. Я хочу, чтобы мой код выполнялся для года = 2008: 2016 и для PartOfYear = 1: 2, однако, когда год = 2017, он должен выполняться только для PartOfYear = 1. То есть, нет PartOfYear = 2, когда год = 2017. Есть ли более эффективный (или даже правильный, как мой, вероятно, неверный) способ сделать это? В данный момент я просто попытался снова запустить PartOfYear = 1 всякий раз, когда он попадает в Year = 2017, PartOfYear = 2, и, таким образом, просто выполнить эту часть кода дважды, но я считаю, что это неверно и неэффективно, так как результаты кажутся быть выключенным.

Спасибо!

for index = 1:20

StartYearData = 2008;
EndYearData = 2017;

for Year = StartYearData:EndYearData
    for PartOfYear = 1:2

        if PartOfYear == 1
            StartDayData = 1;
            StartMonthData = 1;
            EndDayData = 30;
            EndMonthData = 6;

        elseif PartOfYear == 2
            StartDayData = 1;
            StartMonthData = 7;
            EndDayData = 31;
            EndMonthData = 12;

            % THIS IS THE WAY I USE TO TRY AND FIX MY PROBLEM
            % BUT I BELIEVE IT IS WRONG OR AT LEAST INEFFICIENT:
            if Year == 2017
                PartOfYear = 1; StartDayData = 1; StartMonthData = 1;
                EndDayData = 30; EndMonthData = 6;
            end
        end 

% DO A LOT OF THINGS

end

1 Ответ

0 голосов
/ 24 августа 2018

Вы не можете изменить переменную цикла внутри цикла. Похоже, вы просто запутались с упорядочением циклов и оператором if.

Есть много способов добиться того, что вы просили. Этот код должен делать то, что вы хотите, и использовать PartOfYear = 1 (не =1:2) только тогда, когда Year = 2017:

for index = 1:20    
    StartYearData = 2008;
    EndYearData = 2017;    
    for Year = StartYearData:EndYearData 
        % If the year is 2017, we only want to use PartOfYear=1, otherwise 1:2
        if Year == 2017
            parts = 1;
        else
            parts = 1:2;
        end
        % Now we can loop over the 'parts', which is either 1 or 1:2
        for PartOfYear = parts 
            StartDayData = 1;   % This is the same regardless of PartOfYear value 
            if PartOfYear == 1
                StartMonthData = 1;
                EndDayData = 30;
                EndMonthData = 6;    
            elseif PartOfYear == 2
                StartMonthData = 7;
                EndDayData = 31;
                EndMonthData = 12;    
            end     
            % Stuff...
        end
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...