我正在学习MATLAB编程课程,目前我们正在开发一个项目,该项目使用一个名为Project2的数据库,该数据库包含多个航空公司飞行数据结构(全部为1 x N)。一项练习要求我们创建一个功能,以识别使用波音737-800飞机的航班段数(位于航班结构中)。下面我已经包含了我创建的函数的代码(注意:第一行的格式是指令中规定的格式,必须保持这种方式)。虽然这个函数似乎工作并且没有bug,但它始终返回0的结果,我无法弄清楚为什么。有人可以帮忙吗?我们非常感谢您解决问题和/或清理代码的建议!
function total = Problem2 (flights, aircraft, airlines, airports)
load Project2
id=findAircraftID (aircraft, Boeing 737-800)
seg=0;
for jj = 1:length(flights)
if (strcmp (flights(1,jj).aircraft_id, id))
seg=seg+1
end
end
fprintf ('A total of %d flight segments used the Boeing 737-800 aircraft.\n', seg)
end
function id=findAircraftID (aircraft, AircraftName)
id=0;
for ii=1:length(aircraft)
if (strcmp (aircraft(1,ii).name, AircraftName))
id=ii;
return;
end
end
end
答案 0 :(得分:1)
为什么使用strcmp来比较整数? aircraft_id是一个字符串吗?如果是这样,也许您可以将id从int转换为字符串。或者更好的是你可以使用isequal(a,b):
if isequal(flights(1,jj).aircraft_id, id)
seg=seg+1;
end
另见Octave/MATLAB: How to compare structs for equality?
的其他方法 另外(或者如果那不是问题)你正在迭代你的第二个函数并设置id几次,但只有最后一个值进入第一个函数。仔细看看你的for循环,看看你是否需要包装它们,将id存储为数组而不是单个整数等等。
没关系,如果飞机名称是唯一的,我会发现您的代码可以正常工作。 strcmp应该适用于那种情况 - 但也许可以逐步检查你是否因为大写,空格等而没有问题。
答案 1 :(得分:0)
通常,当您想要在数组中找到与条件匹配的元素时,可以使用类似
的内容bWhenAis3 = B(A == 3);
当A为3时找到B的值。这可以返回多个值的向量,并且通常比显式循环快得多。
在您的代码中,aircraftID
是一个整数,因为它由findAircraftID
返回,返回ii
。你无法将其与字符串进行比较!你需要比较类似的类型。