matlab - 使用 Matlab 在循环内更改循环
问题描述
我查看了 Matlab 手册和各种帖子,但似乎没有什么合适的。您会在下面找到有问题的代码。
我的代码运行良好,但是,我不确定 Year 和 PartOfYear 的循环。我希望我的代码运行 Year = 2008:2016 和 PartOfYear = 1:2,但是,当 Year = 2017 时,它应该只运行 PartOfYear = 1。即,当 Year = 2017 时没有 PartOfYear = 2。是有更有效(甚至正确,因为我的可能不正确)的方法吗?目前,我只是尝试再次运行 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
解决方案
您不能更改循环内的循环变量。看起来您只是对循环和if
语句的顺序感到困惑。
有很多方法可以实现您所要求的。这段代码应该做你想做的事,并且只在以下情况下使用PartOfYear = 1
(not =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
推荐阅读
- php - Laravel 本地化不适用于所有路线
- excel - Excel 在另一个工作簿中运行宏,在第一个工作簿上引用数据,然后将它们都关闭。只有一个会关闭
- laravel-5 - 如何使用 laravel mix 将 js 编译为 es5?
- cocoapods - 如何处理具有共同来源的 test_specs
- android - Android Studio的build gradle(app)中定义的依赖版本在哪里?
- reactjs - React 的非破坏空间?
- python - 自定义 ImageDataGenerator 行为不端
- excel - 使用 Excel VBA 创建具有特定值的行的 Outlook 电子邮件正文
- tableau-api - 计划刷新 Tableau desktop 10.4 并在特定日期/时间计划刷新
- javascript - 在 Jquery 中切换列表元素,同时始终显示前几个元素