2016-04-22 1 views
0

Quelqu'un peut-il m'aider à écrire le code pour vérifier si l'utilisateur a entré la même coordonnée deux fois?vérification de l'entrée répétée des coordonnées par l'utilisateur MATLAB

partie du code:

rc = input('Enter your next move [row space column]: '); 
       row = rc(1); %users coordinates 
       col = rc(2); 
          if row<0 || col<0 
          disp('Please enter positive coordinates'); 
          rc = input('Enter your next move [row space column]: '); 
          row = rc(1); 
          col = rc(2); 
          end 
          if row>size || col>size 
          disp('Please enter cordinates with in the game board'); 
          rc = input('Enter your next move [row space column]: '); 
          row = rc(1); 
          col = rc(2); 
          end 

Je allready vérifiée positif et trop grand nombre de valeurs, mais maintenant je veux vérifier pour vous assurer que l'utilisateur ne saisit pas la même coordonnée deux fois, et si elles affiche un message d'erreur Toute aide est appréciée Merci

+0

Je vous suggère fortement de remplacer les déclarations '' if' avec while' boucles, sinon vous autorisez l'utilisateur final planter votre programme. Souhaitez-vous afficher un message ['error'] (http://mathworks.com/help/matlab/ref/error.html?requestedDomain=www.mathworks.com) pour interrompre le programme ou demander à l'utilisateur [' input '] (http://mathworks.com/help/matlab/ref/input.html) comme vous le faites déjà? Ce sont des choses différentes. – codeaviator

+0

oh je vois, je voudrais demander l'entrée de l'utilisateur à nouveau après que l'utilisateur entre une coordonnée de répétition. et pour les boucles while, est-ce que je ferais: while row <0 || col <0 et ainsi de suite? – katDouglas

+0

Exactement. Voulez-vous demander une entrée utilisateur si l'utilisateur répète 'row || col' ou 'row && col'? En passant, connaissez-vous l'opérateur '=='? – codeaviator

Répondre

0

Comme je l'ai déjà mentionné dans la section des commentaires, pour vous assurer que l'utilisateur ne saisit pas les mêmes coordonnées deux fois, vous devez stocker toutes les paires de coordonnées valides dans des tableaux, de sorte que la prochaine fois l'utilisateur entre une nouvelle paire de coordonnées, vous pouvez vérifier si elles existent déjà.

J'ai créé deux matrices: rowv pour les coordonnées row et colv pour les coordonnées col.

Je mis en œuvre la condition while suivante à l'aide du logical operatorsany et &, combiné avec le ==relational operator:

% Check that the point is not repeated. 
while any((rowv == row) & (colv == col)) 

Donc, tant que l'utilisateur entre répété coorinates il/elle sera demandé d'essayer à nouveau jusqu'à ce que une paire valide est entrée.

Le code suivant est un exemple de travail complet, de sorte que vous pouvez tester tout de suite:

% Game board size. 
size = 4; 

% Ask for number of points. 
n = input('Number of points: '); 

% Preallocate arrays with -1. 
rowv = -ones(1,n); 
colv = -ones(1,n); 

% Iterate as many times as points. 
for p = 1:n 
    % Ask for point coordinates. 
    rc = input('Enter your next move [row space column]: '); 
    row = rc(1); 
    col = rc(2); 

    % Check that coordinates are positive. 
    while row<0 || col<0 
     disp('Please enter positive coordinates'); 
     rc = input('Enter your next move [row space column]: '); 
     row = rc(1); 
     col = rc(2); 
    end 

    % Check that coordinates are within the game board. 
    while row>size || col>size 
     disp('Please enter cordinates within the game board'); 
     rc = input('Enter your next move [row space column]: '); 
     row = rc(1); 
     col = rc(2); 
    end 

    % Check that the point is not repeated. 
    while any((rowv == row) & (colv == col)) 
     disp('Coordinates already exist. Please enter a new pair of cordinates'); 
     rc = input('Enter your next move [row space column]: '); 
     row = rc(1); 
     col = rc(2); 
    end 

    % The point is valid. 
    % Store coordinates in arrays. 
    rowv(p) = rc(1); 
    colv(p) = rc(2); 
end