Как определить переменную из другой функции? - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть многофункциональный скрипт, который должен запрашивать у пользователя 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

Group_Function1

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

Group_Function2

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

Group_Function3 (где возникает проблема)

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», чтобы при появлении запроса на ввод ответов я знал, для какого транспортного средства я вхожу.

1 Ответ

1 голос
/ 23 апреля 2019

Каждый 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...