MATLAB Answers

0

Error when If statement is not true

Asked by Kateri Kaminski on 31 Oct 2018
Latest activity Commented on by Kateri Kaminski on 5 Nov 2018
Hello,
I have a user supplying a 'Yes' or 'No' input to a question. I want to use the response to determine if plots are created or not. If I select 'Yes', the code runs fine. However, if I select 'No', I get this error: Error in PostProcessing_filetest (line 118) , if answer == 'Yes'. Why won't Matlab go to the else statement if the if-statement is not true? Can someone help point out my error? Below is a portion of my code. The variables in the if-portion of the code are defined before-hand. Thank you!
....
quest = 'Do you want another set of maps?';
answer = questdlg(quest);
if answer == 'Yes'
strm1a = 'What is the map height (pixels)?';
strm2a = 'What is the map width (pixels)?';
strm3a = 'What is the min Frequency?';
strm4a = 'What is the max Frequency?';
strm5a = 'What is the min x parameter?';
strm6a = 'What is the max x parameter?';
strmat = {strm1a,strm2a,strm3a,strm4a,strm5a,strm6a};
xminstrg = round(min(min(min(xparm))));
xmaxstrg = round(max(max(max(xparm))));
default = {'300','500','0','200','0','1000'};
inputmapa = inputdlg(strmat,'New Map Parameters',[1 50],default);
h = str2double(inputmapa{1});
w = str2double(inputmapa{2});
mapFmin = str2double(inputmapa{3});
mapFmax = str2double(inputmapa{4});
mapxmin = str2double(inputmapa{5});
mapxmax = str2double(inputmapa{6});
i = 1;
for i = 1: numfiles
figure(fignum)
fignum = fignum + 1;
hold on
axis([mapxmin mapxmax mapFmin mapFmax])
himage = imagesc(xparm(:,:,i),Farray,Amp(:,:,i));
colormap;
hAxes = himage.Parent;
ampmax(i) = max(max(Amp(:,:,i)));
hAxes.CLim = [s,ampmax(i)/10];
xlabel(strcat(namexparm,'(', unitsxparm, ')'));
ylabel("Frequency(Hz)");
title(strcat("Waterfall map for: Test ", testname , "-", fn(i)))
colorbar;
truesize([h w]);
hold off
end
else
disp("no more plots");
end
.....

  0 Comments

Sign in to comment.

1 Answer

Answer by Amy Haskins on 5 Nov 2018
 Accepted Answer

The problem is with using == on character vectors. Each character is treated as a separate element and compared individually. This will error when the lengths of the strings you are trying to compare doesn't match.
>> 'no' == 'yes'
Matrix dimensions must agree.
>> 'yes' == 'yes'
ans =
1×3 logical array
1 1 1
There are 2 easy solutions. One is to use strcmp. The other is to use the string data type (introduced in R2016b) which will behave more like you were expecting.
>> strcmp('no','yes')
ans =
logical
0
>> "no" == "yes" % String scalars
ans =
logical
0

  1 Comment

Oh this makes sense. Thanks!

Sign in to comment.