2014-10-15 2 views
0

그래서 팝업 상자가있는 간단한 if 문을 다음 코드로 작성했습니다. 내 질문은 왜 내가 어떤 (오류 == 1) 대신 어떤 (모든 (오류 == 1)) 사용할 때 작동하지 않습니다 무엇입니까?(A)가 작동하지 않는 이유는 무엇입니까?

K=100 
error = zeros(K,28) 

%lots of other code 

error(K,2)=1      %this is here as a test to trigger the true logic statement 
if any(any(error==1)) 
    disp('hello') 
    f = figure; 
    h = uicontrol('Position',[20 20 50 40],'String','Ok','Callback','uiresume(gcbf)'); 
    uiwait(gcf); 
    close(f); 
end 

나는 코드가 작동하지만 "모든"기능의 작동을 이해하고자합니다.

+0

는 다음 코드를 실행하기위한 볼 "어떤 (오류 == 1)"내 시스템에 반환하지 오류입니다. 벡터가 반환되는 것이 문제입니까? – danny

+2

'error'는 2D 행렬이기 때문에 본질적으로'any (error == 1,1)'인'any (error == 1) '은 행 벡터가 될 것이고'IF' 조건문과 함께 사용하면, IF 부분에 들어가기 위해서는 모두 'ones/true'가되어야합니다. 그러나 스칼라가되고'one/true'가되는'any (any (임의 = 오류 == 1) ')를 사용하면 이전에 획득 한 행 벡터의 요소 중 하나는'one/true '가되어야합니다. 요약하자면,'any (any (error == 1))'는'any (error == 1) '보다'사려 깊은 '것입니다. – Divakar

+0

확인. 나는 이것이 아마도 원인이라고 생각했지만 IF가 TRUE를 유발하기 위해 완전히 채워질 필요가 있다는 것을 깨닫지 못했습니다. 매우 도움이됩니다. 감사합니다. – josh

답변

2

if 성명.

if 진술을 계속하려면 논리적이어야합니다. 입력이 1 개 이상인 경우 모두 참이어야합니다. 벡터의 모든 인덱스가 사실이 아니다만큼 경우

>> any(error==1) 

ans = 

    Columns 1 through 18 

    0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 

    Columns 19 through 28 

    0  0  0  0  0  0  0  0  0  0 

>> any(any(error==1)) 

ans = 

    1 

는 따라서 첫 번째 경우,이 두 번째로하지만, 건너 뜁니다 : 코드에서

하나는 대답이 1이므로 코드를 실행합니다.

이 시도하고 자신

if [0 1] 
    disp('This is not going to be displayed') 
end 
if [1 1] 
    disp('Hellooo, this will!') 
end 
if any([0 1]) 
    disp('Yay! this also!') 
end 
관련 문제