If statement not working correctly

21 ビュー (過去 30 日間)
Arnav Barbaad
Arnav Barbaad 2016 年 8 月 3 日
コメント済み: Steven Lord 2016 年 8 月 4 日
This is driving me insane, I've checked the code 101 times yet can't find any error. This a simple application of if statement.
for i=1:c
parity=mod(x(i),2);
d=bistr(i);
if parity==1 && d==0
display('Hello');
elseif parity==0 && d==0
display('How');
elseif parity==0 && d==1
display('Are');
elseif parity==1 && d==1
display('You');
end
end
i goes from 1 to 192 (c=192). As you can see, parity can either be 0 or 1. d is also either 0 or 1 (it's a matrix of 1s and 0s)
YET THIS CODE WON'T PRINT ANY SINGLE OF THE STRING 'HELLO','HOW','ARE' or 'YOU'. Like I've exhausted all the logical possibilities for parity and d. What is going wrong?
(Yes I've tried printing every single variable at the starting of the loop to see if the loop itself is working fine. IT IS. IT'S JUST THAT THE IF STATEMENT ISN'T GETTING EXECUTED AT ALL!)
  3 件のコメント
Adam
Adam 2016 年 8 月 3 日
What is 'bistr'?
Presumably whatever it is returning is not actually either a 0 or a 1
Arnav Barbaad
Arnav Barbaad 2016 年 8 月 3 日
You are right Adam, bistr is returning '1' instead of 1

サインインしてコメントする。

採用された回答

Steven Lord
Steven Lord 2016 年 8 月 3 日
Look at the classes of parity and d. My guess is that parity is a double array but d (being an element of an array I assume is called "bitstr" not "bistr") is a char array.
'1' == 1 % returns false
true == 1 % returns true
1 == 1 % returns true
So if d is a char array, bitstr will look something like:
>> bitstr = char(randi(double('01'), 4, 4))
bitstr =
0111
1010
1111
1100
The elements of bitstr are not equal to 0 or 1 but are equal to either '0' or '1'.
>> bitstr == '1'
  4 件のコメント
Arnav Barbaad
Arnav Barbaad 2016 年 8 月 3 日
Well got it. The windows belonged to my professor who had a full version license. Since de2bi belongs to communication system toolbox, my student license MATLAB doesn't have it. Hence the error
Steven Lord
Steven Lord 2016 年 8 月 4 日
You could use '1' instead of 1 in your if statement, or subtract '0' from the array (since '0' and '1' are adjacent in ASCII), or convert to logical using:
bistr == '1'

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by