MATLAB:如何确定数组的任何元素是否为某个数字

时间:2019-05-03 12:47:29

标签: matlab

我正在为任务创建一个简单的扫雷游戏,但是我无法使程序确定玩家是否获胜。我试图找到一个确定A的元素是否等于-2的函数,然后在while循环中使用它。

我已经使用一个简化的测试代码来尝试执行此操作,但是找不到任何可以执行我想做的功能的

到目前为止,我已经尝试了一切,要么只是继续要求更多输入,即使应该说游戏结束了,要么完全跳过了while循环。最后一件事可能发生了,因为开始数组的所有元素都相等。

我看过xor,unique,setdiff,intersect,ismember isempty,还有可能我不记得了。

由于这不是完整的代码,因此我每次都对标志问题回答是,以便将所有元素从-2更改为-3。

我也知道,这不是确定玩家是否获胜的最好方法,因为它并没有考虑所有标志是否正确放置,但是我想在此之前先对这部分进行排序我继续说:)

A=zeros(2)
selected=0;
flag=-3

for r=1:2
    for c=1:2
        A(r,c)==-2;
    end
end

while % any of the elements in A are equal to -2
    while selected~=-1 
        selectRow=input('Which row is the cell you would like to access on? ');
        selectCol=input('Which column is the cell you would like to access on? ');
        selectFlag=input('Would you like to put a flag in this cell? ','s');
        if selectRow<=2 && selectRow>=1 && selectCol<=2 && selectCol>=1
            while strcmp(selectFlag, 'yes') || strcmp(selectFlag, 'no')
                if strcmp(selectFlag, 'yes')
                    A(selectRow,selectCol)=flag;
                    disp(A);
                elseif strcmp(selectFlag, 'no')
                    selected=mineBoard(selectRow,selectCol);
                    A(selectRow,selectCol)=selected;
                    disp(A);
                end
            end
        end
    end
fprintf('You have hit a mine. Please restart.\n');
end

fprintf('Congrats! You have won!');

1 个答案:

答案 0 :(得分:0)

有多种方法可以知道A的条目是否等于-2以及如何与所有这些条目的位置进行交互。

any功能
正如@ etmuse和@ Wolfie在评论中所建议的那样,any函数可能是最好的选择。请注意,在文档中,更高级的选项可用于版本R2018b和更高版本。

% MATLAB R2017a
rng(8675309)                % For reproducibility (ensure some -2 appear)
A = randi([-4 0],4)         % Generate example matrix
any(A == -2,1)              % Test columns of A
any(A == -2,2)              % Test rows of A

逻辑索引

% Use a logical index
idx = (A == -2)

指数
使用索引有点棘手。

% Use the indices directly.
ind = find(A==-2) 

请注意,如果将数组A转换为矢量形式,则会为您提供索引。

A(:)                            % Force column vector
reshape(A(:),4,4)'              % Reshape into matrix

披露:如果@etmuse或@Wolfie使用any函数发布答案,将从我的答案中删除该答案,或制作此社区Wiki。这是他们的主意。