我收到一条错误消息:
矩阵尺寸必须一致。
tankGame中的错误> exmRange(第119行) if(p1.dir ==‘down’)p1.value = imrotate(p1.oriValue,180,‘bilinear’);结束然而我检查了……
产生错误的可能性是 p1.dir == 'down' 。该 == operator是一个逐元素的运算符,它比较两个char向量中的每个字符,产生一个布尔向量,指示哪个字符对相等。它没有进行字符串比较。
p1.dir == 'down'
==
例如,如果 p1.dir 是char矢量 'up ',然后你将一个有2个字符的向量与一个有4个字符的向量进行比较:
p1.dir
'up
'up'=='down' % generates the error message "Matrix dimensions must agree." 'doom'=='down' % returns the logical array [true true false false]
使用 strcmp 比较字符串:
strcmp
if strcmp(p1.dir,'down') p1.value = imrotate(p1.oriValue, 180,'bilinear'); end
在较新版本的MATLAB(从R2016b开始)中有一个实际的 string 类型(而不是 char 在MATLAB中一直被称为“字符串”的向量。一个 string 是用双引号创建的: "down" (而不是 'down' ,这是一个 char 向量)。对于这种新型, == 运算符确实进行字符串比较。将操作员应用于a时 string 一个 char 矢量, char 转换为 string 。所以另一个解决方案是这样做:
string
char
"down"
'down'
if p1.dir == "down" p1.value = imrotate(p1.oriValue, 180,'bilinear'); end