You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用短路或(||)时仅能比较标量?BMI计算器MATLAB代码报错排查

MATLAB BMI计算器逻辑运算符报错问题

在编程课制作BMI计算器时,需要限制height(身高)和weight(体重)的数值范围,但运行代码时反复出现报错:

逻辑运算符(&& 和 ||)的操作数必须能转换为逻辑标量值。请使用ANY或ALL函数将操作数缩减为逻辑标量值。

我原本以为float是标量,搞不懂问题出在哪,以下是我的MATLAB代码:

weight = input("please enter your weight in kgs: ","s");
str2double(weight)
while isnan(weight)
weight = input("please enter your weight in kgs: ","s");
str2double(weight);
end
height = input("please enter your size in meters: ", "s");
str2double(height)

h = isscalar(size)
w = isscalar(height)

while isnan(height) || height > 2.2 || height < 1.3
hight = input("please enter your size in meters: ","s");
str2double(height);
end

示例输入输出

  • 输入:please enter your weight in kgs: 70
    输出:
    ans =
    70
    
  • 输入:please enter your size in meters: 1.87
    输出:
    ans =
    1.8700
    h =
    logical
    0
    w =
    logical
    0
    

问题根源与修复方案

  1. 未保留数值转换结果
    调用str2double(weight)和str2double(height)后,没有把转换后的数值赋值回原变量,导致weight和height始终是字符串类型。字符串无法参与数值比较,且isnan对字符串调用会返回逻辑数组而非标量,直接触发逻辑运算符的报错。

  2. 变量名拼写错误
    身高校验循环里把height误写为hight,导致输入的新值无法赋值给目标变量,循环逻辑完全失效。

  3. 错误使用内置函数名
    size是MATLAB内置函数,isscalar(size)判断的是函数句柄是否为标量,和身高的标量判断毫无关系,属于逻辑误用。

修复后的代码:

% 处理体重输入,确保为有效数值
weight_str = input("please enter your weight in kgs: ","s");
weight = str2double(weight_str);
while isnan(weight)
    weight_str = input("please enter your weight in kgs: ","s");
    weight = str2double(weight_str);
end

% 处理身高输入,限制范围1.3-2.2米
height_str = input("please enter your size in meters: ", "s");
height = str2double(height_str);
while isnan(height) || height > 2.2 || height < 1.3
    height_str = input("please enter your size in meters: ","s");
    height = str2double(height_str);
end

% 计算并输出BMI
bmi = weight / (height^2);
disp(["Your BMI is: ", num2str(bmi)])

关键说明

  • 必须将str2double的结果赋值给变量,确保后续操作的是数值类型。
  • isnan仅支持数值类型,对字符串调用会返回非标量逻辑值,这是触发报错的核心原因。
  • 避免使用MATLAB内置函数名作为变量名,防止逻辑混乱。

内容的提问来源于stack exchange,提问作者Hauke Jakubowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:46:13