2016-02-26 11 views
-1

問題是問題23,找到了完美的方塊。我的代碼如下所示:CODY mathworks上的聲明失敗

function b = isItSquare1(a) 
if any(ismember(a,a.^2))==0 
    b='false'; 
else 
    b='true'; 
end 
end 

我越來越Assertion failed而使用該功能是正確的:

function b = isItSquare(a) 
c=0;i=1; 
b='false'; 

while c==0&i<=length(a) 
if length(find(a==a(i)^2))~=0 

b='yes'; 

c=1; 
end 
i=i+1; 

end 

b 
end 

科迪接受我無法理解爲什麼答案?提前致謝。

+1

的斷言被髮布,是嗎?所以你可以自己運行它們並檢查哪個斷言失敗,以及爲什麼。 – hbaderts

回答

1

MATLAB具有布爾類型(類型被稱爲在MATLAB 「邏輯」),truefalse(通常由10表示)。這是而不是與字符串'true'/'false'相同。比較以下幾點:

>> x = 'true' 
>> y = true 

workspace

這是兩個根本不同的東西。如果你比較使用==這些值:

>> 'true' == true  
ans = 
    0  0  0  0 

然後MATLAB處理'true'爲字符的載體,每個值true,這回false=0比較。 然而

>> true == 1 
ans = 
    1 

現在,您的問題:第一個測試套件對科迪是

a = [2 3 4]; 
assert(isequal(isItSquared(a),true)) 

即輸出必須true而不是'true'。因此,在代碼中將'true'替換爲true'false'false,並且斷言應該通過。

小提示:任何比較運算符,例如==~=<,...自動創建的邏輯(truefalse)作爲輸出,例如:

>> x = (1 == 2) 
x = 
    0