J'ai une chaîne contenant plusieurs éléments, certains identiques et d'autres uniques. Je veux que mon code vérifie chaque 2 éléments suivants dans ma chaîne et s'ils sont égaux, il devrait appeler une fonction ShuffleString
, où la variable d'entrée (randomize
) est la chaîne elle-même, qui remodèlera la chaîne dans une nouvelle position . Ensuite, le script doit vérifier à nouveau tous les 2 éléments suivants dans la chaîne jusqu'à ce que deux éléments identiques apparaissent côte à côte.Comment mélanger de telle sorte que deux mêmes éléments ne sont pas ensemble?
Je l'ai fait ce qui suit:
Mon fichier de fonction ShuffleString
fonctionne très bien. La variable d'entrée randomize
, comme indiqué précédemment, contient les mêmes éléments que MyString
mais dans un ordre différent, car cela était nécessaire sur une question non liée plus tôt dans le script.
function [MyString] = ShuffleString(randomize)
MyString = [];
while length(randomize) > 0
S = randi(length(randomize), 1);
MyString = [MyString, randomize(S)];
randomize(S) = [];
end
Le script ne fonctionne pas comme prévu. En ce moment, il ressemble à ceci:
MyString = ["Cat" "Dog" "Mouse" "Mouse" "Dog" "Hamster" "Zebra" "Obama"...
"Dog" "Fish" "Salmon" "Turkey"];
randomize = MyString;
while(1)
for Z = 1:length(MyString)
if Z < length(MyString)
Q = Z+1;
end
if isequal(MyString{Z},MyString{Q})
[MyString]=ShuffleString(randomize)
continue;
end
end
end
Il semble juste de remanier la chaîne une quantité infinie de fois. Quel est le problème avec ceci et comment puis-je le faire fonctionner?
parce que vous utilisez une boucle infinie? 'alors que (1)'. –