How to assign a given value to an element of an array without repeating it.
    1 visualización (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Yro
      
 el 27 de Mayo de 2021
  
    
    
    
    
    Comentada: Yro
      
 el 27 de Mayo de 2021
            Hello, I need to change the value of an element of the array x for a random value but that this is not repeated in the array. With the following code I check that it is not repeated and then I assign it to the y position. 
x = [1 3 5 7 9];
y  = randi([1 10]);
n = randi([1 length(x)]);
if ~ismember(y, x)
   disp('  NO')
   x(n) = y;
else
But the problem is in the case that it is repeated, how could I re-generate another number and perform the previous procedure.
Thanks in advance.
0 comentarios
Respuesta aceptada
  Walter Roberson
      
      
 el 27 de Mayo de 2021
        x = [1 3 5 7 9]
y  = setdiff(randi([1 10]), x)
n = randi([1 length(x)])
ny = randi([1 length(y)])
x(n) = y(ny)
3 comentarios
  Walter Roberson
      
      
 el 27 de Mayo de 2021
				Correction to the code:
x = [1 3 5 7 9]
y  = setdiff(1:10, x)
n = randi([1 length(x)])
ny = randi([1 length(y)])
x(n) = y(ny)
So y selects the elements of 1:10 that are not in x, and then ny selects a random member of that, so y can never be something that is already in x. No loop is needed.
Más respuestas (0)
Ver también
Categorías
				Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!