EDIT:(Getting a Different Error Now: " Index exceeds matrix dimensions".) >>User Inputed Word--> Yields a corresponding number.
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
>PREVIOUS:
>Hello, this is a small part of a larger code I am writing that is supposed to give a total "value" of pieces of scrap >metal at a junk yard. The other parts are fairly straightforward, and I have had no trouble figuring them out >(involved basic statements), except for the final part.
>Anyway, A user will input a range of numbers describing things such as the "length, width, mass, etc", and then a >"value" of the piece of >metal is determined by adding up the sub scores. These numbers range from a grade of 1-5.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Thanks for the help earlier guys, but now I am getting a new error.
My new code: (the x1, x2, x3 ect are just arbitrary variables to store the sub-scores)
cond = input('Condition');
switch cond
case 1
x1=0;
case 2
x1=5;
case 3
x1=10;
case 4
x1=15;
case 5
x1=20;
otherwise
x1=0;
end
color = input('Color');
switch lower(color)
case {'blue' 'white'}
x2 = 12;
case 'red'
x2 = 20;
case 'pink'
x2 = 2;
case 'black'
x2 = 15;
otherwise
x2 = 0;
end
mass= input('Mass');
switch mass
case 1
x3 = 8;
case 2
x3= 16;
case 3
x3=16;
case 4
x3=20;
case 5
x3=20;
otherwise
x3=0;
end
length= input('Length: ');
switch length
case 1
x4=8;
case 2
x4=8;
case 3
x4=19;
case 4
x4=19;
case 5
x4=19;
otherwise
x4=0;
end
width= input('width: ');
switch width
case 1
x5=6;
case 2
x5=13;
case 3
x5=13;
case 4
x5=18;
case 5
x5=18;
otherwise
x5=0;
end
points=(x1)+(x2)+(x3)+(x4)+(x5);
disp(['The value of that piece of scrap is ', num2str(points), ' points'])
The error "Index exceeds matrix dimensions" is occurring at every "input" line.
0 Kommentare
Akzeptierte Antwort
Image Analyst
am 13 Apr. 2012
Spencer: Try it this way:
clc; % Clear command window.
format compact; % Remove unnecessary blank lines from output.
workspace; % Display the workspace panel.
defaultValue = 1;
titleBar = 'Enter a value';
caUserInput = inputdlg('Enter the condition ', titleBar, 1, {num2str(defaultValue)});
if isempty(caUserInput),return,end; % Bail out if they clicked Cancel.
cond = round(str2double(cell2mat(caUserInput)));
switch cond
case 1
x1=0;
case 2
x1=5;
case 3
x1=10;
case 4
x1=15;
case 5
x1=20;
otherwise
x1=0;
end
caUserInput = inputdlg('Enter the color ', titleBar, 1, {num2str(defaultValue)});
color = round(str2double(cell2mat(caUserInput)));
if isempty(caUserInput),return,end; % Bail out if they clicked Cancel.
switch lower(color)
case {'blue' 'white'}
x2 = 12;
case 'red'
x2 = 20;
case 'pink'
x2 = 2;
case 'black'
x2 = 15;
otherwise
x2 = 0;
end
caUserInput = inputdlg('Enter the mass ', titleBar, 1, {num2str(defaultValue)});
if isempty(caUserInput),return,end; % Bail out if they clicked Cancel.
mass = round(str2double(cell2mat(caUserInput)));
switch mass
case 1
x3 = 8;
case 2
x3= 16;
case 3
x3=16;
case 4
x3=20;
case 5
x3=20;
otherwise
x3=0;
end
caUserInput = inputdlg('Enter the length ', titleBar, 1, {num2str(defaultValue)});
if isempty(caUserInput),return,end; % Bail out if they clicked Cancel.
length = round(str2double(cell2mat(caUserInput)));
switch length
case 1
x4=8;
case 2
x4=8;
case 3
x4=19;
case 4
x4=19;
case 5
x4=19;
otherwise
x4=0;
end
caUserInput = inputdlg('Enter the width ', titleBar, 1, {num2str(defaultValue)});
if isempty(caUserInput),return,end; % Bail out if they clicked Cancel.
width = round(str2double(cell2mat(caUserInput)));
switch width
case 1
x5=6;
case 2
x5=13;
case 3
x5=13;
case 4
x5=18;
case 5
x5=18;
otherwise
x5=0;
end
points=(x1)+(x2)+(x3)+(x4)+(x5)
fprintf('The value of that piece of scrap is %d points.\n', points)
2 Kommentare
Image Analyst
am 13 Apr. 2012
Notem these:
caUserInput = inputdlg('Enter the width ', titleBar, 1, {num2str(defaultValue)});
is supposed to be all on one single line (in case it doesn't show up that way in your browser).
Weitere Antworten (3)
Geoff
am 13 Apr. 2012
Nah... Try this:
colors = {'Blue', 'Red', 'Pink', 'Black', 'White'};
values = [12 20 2 15 12];
You can search for the index of your colour like this:
col = find( cellfun(@(c) strcmpi(c, color), colors) );
Or, the more clunky approach is to use a switch statement...
switch lower(color)
case 'blue'
value = 12;
case 'red'
value = 20;
.....
end
Hope that wasn't too much hinting.
3 Kommentare
Geoff
am 13 Apr. 2012
I mean more clunky because if you simply want to map a string to a value, a switch statement can become very cluttered. Plus, using arrays means you can generalise the solution into a function (which could inform the user what the available options are if they enter an invalid value). It reduces the possibility of having to update your code in more than one place if you want to make a change, and you can use the same function for any string->value input.
Image Analyst
am 13 Apr. 2012
Why are you messing with strings and input()? Why not use menu(), like this:
%Blue=12
%Red=20
%Pink=2
%Black=15
%White=12
button = menu('Pick a color', 'Blue', 'Red', 'Pink', 'Black', 'White')
switch button
case 1
output = 12
case 2
output = 20
case 3
output = 2;
case 4
output = 15
otherwise
output = 12
end
message = sprintf('The value is %d', output);
msgbox(message);
0 Kommentare
Siehe auch
Kategorien
Mehr zu NaNs finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!