Does randperm work with objects rather than integer?.

조회 수: 13 (최근 30일)
Maya Nielan
Maya Nielan 2016년 5월 19일
댓글: Walter Roberson 2016년 5월 19일
I am trying to shuffle a deck of cards and am using
function obj = shuffle(obj)
obj.carddeck = obj.carddeck(randperm(length(obj.carddeck)));
end
yet when i print out the instance of "carddeck", each object or "card" is in the same position and there is no change

답변 (1개)

Walter Roberson
Walter Roberson 2016년 5월 19일
In that code, randperm is being applied to the integer length(obj.carddeck) not to some other kind of object. What-ever your problem might be is elsewhere.
You could, for debugging purposes, break out the randperm into a temporary variable, so that you could see that it is working properly; that would allow you to check that your indexing is returning a new order and that your revised obj has the new order.
My guess would be that you are calling the shuffle routine without assigning the result to the original object.
  댓글 수: 2
Maya Nielan
Maya Nielan 2016년 5월 19일
how do I assign the result to the original object? My working portion of the code is below up until 'end'
temp = Card.empty();
for x = 1:52
temp(x) = obj.carddeck(randsample(52,1));
end
obj.carddeck = temp;
I know the temporary variable "temp" is correctly working and holds a randomly sorted vector of "Card"s.
However reassigning my property "carddeck" using
obj.carddeck = temp;
doesn't work.
Walter Roberson
Walter Roberson 2016년 5월 19일
That version of the code uses selection with replacement, so it is not suitable for shuffling. Your original code looks fine. However, when you call the shuffle code, you cannot simply use
shuffle(MyDeck)
or
MyDeck.shuffle
and you instead need to use
MyDeck = shuffle(MyDeck)
or
MyDeck = MyDeck.shuffle
If you want to be able to use simply
MyDeck.shuffle
as the syntax, then you need to switch to handle objects instead of structures or value objects.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by