我的目标是提示用户输入一个值,然后在矩阵中输出与他们输入的值相对应的行。命令窗口识别我的矩阵但不输出特定的行,即使我输入了正确的值。
这是我到目前为止所拥有的。
prompt='Please enter an alloy code: '; %enter either A2042,A6061 or A7005
x=input(prompt);
A2042=a(1, :); A6061=a(2, :); A7005=a(3, :);
%alloy compositions a=[4.4 1.5 0.6 0 0; 0 1 0 0.6 0; 0 1.4 0 0 4.5; 1.6 2.5 0 0 5.6; 0 0.3 0 7 0];
所以当我输入A2042时,我希望它显示第1行。出于某种原因,它没有合作。谢谢你的帮助!
答案 0 :(得分:3)
使用dynamic field references的选项,如果你有很多合金,并且不想为所有合金写出case
声明:
a=[4.4 1.5 0.6 0 0; 0 1 0 0.6 0; 0 1.4 0 0 4.5; 1.6 2.5 0 0 5.6; 0 0.3 0 7 0];
alloy.A2042 = a(1, :);
alloy.A6061 = a(2, :);
alloy.A7005 = a(3, :);
prompt = 'Please enter an alloy code: '; % Enter either A2042, A6061 or A7005
x = input(prompt, 's');
try
disp(alloy.(x));
catch
warning(sprintf('Alloy selection, %s, not found.\n', x));
end
答案 1 :(得分:3)
我建议不要为每个合金名称创建单独的变量,即不要这样做:
A2042=a(1, :); A6061=a(2, :); A7005=a(3, :);
而是保留一个名称变量,例如:
alloyNames = {'A2042';
'A6061';
'A7005';
...}; %// note this must have the same number of rows as matrix a does
现在alloyNames
中给定名称的行与a
中的正确行匹配:
a=[4.4 1.5 0.6 0 0;
0 1 0 0.6 0;
0 1.4 0 0 4.5;
1.6 2.5 0 0 5.6;
0 0.3 0 7 0];
现在当你要求输入时:
x=input(prompt)
您可以使用strcmp
查找正确的行:
idx = strcmp(alloyNames, x);
然后您可以使用该索引显示正确的行:
a(idx,:)
答案 2 :(得分:1)
使用switch
:
a=[4.4 1.5 0.6 0 0; 0 1 0 0.6 0; 0 1.4 0 0 4.5; 1.6 2.5 0 0 5.6; 0 0.3 0 7 0];
prompt='Please enter an alloy code: ';
switch input(prompt)
case 'A2042'
x = a(1, :);
case 'A6061'
x = a(2, :);
case 'A7005'
x = a(3, :);
otherwise
warning('Unexpected option!')
end
disp(x);
答案 3 :(得分:-2)
尝试在使用之前声明变量,如下所示:
clear
%alloy compositions
a=[4.4 1.5 0.6 0 0; ...
0 1 0 0.6 0; ...
0 1.4 0 0 4.5; ...
1.6 2.5 0 0 5.6; ...
0 0.3 0 7 0];
A2042=a(1, :);
A6061=a(2, :);
A7005=a(3, :);
prompt='Please enter an alloy code: '; %enter either A2042,A6061 or A7005
x=input(prompt)