我有一个多功能脚本,应该向用户询问4辆不同的汽车,并根据额定值对它们进行加权,从而为用户提供最佳的购买汽车。 我要做的是提示用户输入的每辆汽车,以便用户可以输入用户决定使用的每个变量的数据。但是,在给提示添加标题时,我想在提示中使用汽车名称。对我来说似乎是不可能的,我不确定该怎么做,这对编码来说是很新的。
prompt1 = {'How Many Cars (4): '};
title1 = 'Cars';
answer1 = inputdlg(prompt1, title1, [1 40]);
Q1 = str2double(answer1{1});
[N] = Group_Function1(Q1);
Car1 = N(1); %Stores the names of the cars
Car2 = N(2);
Car3 = N(3);
Car4 = N(4);
prompt2 = {'How Many Variables (4): '};
title2 = 'Variables';
answer2 = inputdlg(prompt2, title2, [1 50]);
fprintf('This code can accept costs between 0-100000\n');
fprintf('This code can accept top speeds between 0-200\n');
fprintf('This code can also accept the terms none, some, & alot\n');
fprintf('This code can accept safety ratings between 0-5\n');
Q2 = str2double(answer2{1});
[V,W] = Group_Function2(Q2);
W1 = W(1); %Stores the weights of the varibles
W2 = W(2);
W3 = W(3);
W4 = W(4);
for h=1:Q1
[H] = Group_Function3(V);
Weights(h,:)=H;
end
function [N] = Group_Function1(Q1)
for Q = 1:Q1
prompt = {'Name of Car:'};
title = 'Car Name';
answer = inputdlg(prompt,title, [1 80])';
N(Q) = answer(1);
end
function [V,W] = Group_Function2(Q2)
for Q=1:Q2
prompt = {'Variable? (Negative Variables First):','weights in decimal
form?'};
title = 'Variables and Weights';
answer = inputdlg(prompt,title, [1 80])';
V(Q)=answer(1);
W(Q)=str2double(answer{2});
s=sum(W);
end
if s~=1
fprintf('Weights do not add up to 1. Try Again!\n');
Group_Function2(Q2);
end
end
function [H] = Group_Function3(V)
prompt = {V};
title = ['Variable Ratings For' Group_Function1(answer{1})];
h = inputdlg(prompt, title, [1 80])';
end
对于“ Group_Function3”,我希望提示包括来自“ Group_Function1”的用户输入,以便在提示输入答案时,我知道我要输入哪辆车。
答案 0 :(得分:1)
每个function
在自己的工作空间中运行,这意味着它不知道其外部变量的状态或内容。如果要让某个功能知道某些特定信息(例如汽车名称),则必须在输入参数中将其赋予该功能。一个函数可以有多个输入参数,而不仅限于一个。
在进入Group_Function3
之前,我想为Group_Function1
提出一种新方法。
Group_Function1:
您运行一个循环以独立询问每个汽车名称。必须验证每个对话框非常繁琐。这是一种一次性查询4个汽车名称的方法:
将脚本的开头替换为:
title1 = 'Cars';
prompt1 = {'How Many Cars (4): '};
answer1 = inputdlg(prompt1, title1 );
nCars = str2double( answer1{1} );
CarNames = getCarNames(nCars) ; % <= use this function
% [N] = Group_Function1(Q1); % instead of this one
并将Group_Function1
替换为:
function CarNames = getCarNames(nCars)
title = 'Car Names';
prompt = cellstr( [repmat('Name of car #',nCars,1) , sprintf('%d',(1:nCars)).'] ) ;
CarNames = inputdlg( prompt, title, [1 80] ) ;
end
现在CarNames
是一个单元格数组,其中包含您4辆汽车的名称(就像变量N
之前所做的那样。我建议使用更明确的变量名)。
您可以按原样运行其余代码(只需将N
替换为CarNames
,将Q1
替换为nCars
)。
Group_Function3:
当您进入Group_Function3
时,必须将当前的汽车名称发送给函数(以便它可以在标题或提示中使用该名称)。因此,将您的Group_Function3
替换为以下内容(我们将输入变量添加到函数定义中):
function H = Group_Function3( V , thisCarName )
prompt = {V};
title = ['Variable Ratings For' thisCarName];
H = inputdlg(prompt, title, [1 80])';
end
并在您的主脚本中这样调用:
for h = 1:nCars
thisCarName = carNames{h} ;
H = Group_Function3( V , thisCarName ) ;
% ...
% anything else you want to do in this loop
end