문제

제 형편없는 문법과 철자법에 대해 죄송하다는 말씀부터 시작하겠습니다.

덱을 만들고 52장의 카드를 추가하는 MVC3 프로젝트가 있습니다.그런 다음 다음과 같은 경우에만 작동하는 셔플 기능을 추가했습니다. 나는 밟는다 shuffle 메소드의 루프.

내 클래스 Deck에서는 52개의 PlayingCard 개체를 포함하는 배열을 만듭니다.데크에는 배열을 내보기에 표시되는 목록에 복사하는 메소드가 있으며 목록을 뒤섞는 메소드도 있습니다.

설명하기 쉽지 않지만 코드는 실행만 됩니다. 한 번 내가 그것을 통과하지 않는 한.

내 Deck 모델의 셔플 방법입니다.

 public void Shuffle()
 {
    for (int i = 0; i < 51; i++)
    {
        PlayingCard temp;
        temp = myDeck[i];
        Random rnd = new Random();
        int randomNr = rnd.Next(51);
        myDeck[i] = myDeck[randomNr];
        myDeck[randomNr] = temp;
    }   
}

다음 단계를 거치지 않고 셔플 후 출력:

*4 다이아몬드1 하트 2 하트 3 하트 4 하트 6 하트 7 하트 9 하트 10 하트 11 하트 11 하트 13 스페이드 2 스페이드 3 스페이드 5 스페이드 6 스페이드 7 스페이드 8 스페이드 10 스페이드 11 스페이드 11 스페이드 12 스페이드 13 스페이드 1 클럽 2 클럽 3 클럽 4 클럽 5 클럽 6 클럽 8 클럽 8 클럽 9 클럽 10 클럽 11 클럽 12 클럽 13 클럽 1 다이아몬드 2 다이아몬드다이아몬드 12개3 다이아몬드 5 다이아몬드 6 다이아몬드 7 다이아몬드 8 다이아몬드 10 다이아몬드 11 다이아몬드 13 다이아몬드 *

15번의 단계를 거친 후 출력:

2 스페이드 3 클럽 5 스페이드 3 다이아몬드 12 다이아몬드 13 하트 11 하트 1 스페이드 6 클럽 5 다이아몬드 1 클럽 12 하트 7 클럽 13 스페이드 2 클럽 10 하트 3 스페이드 3 스페이드 6 스페이드 7 스페이드 9 스페이드 10 스페이드 11 스페이드 11 스페이드 12 스페이드 8 하트 7 하트 1 하트 2 하트 4 클럽 5 클럽 9 하트 6 하트 8 클럽 10 클럽 10 클럽 11 클럽 12 클럽 1 클럽 1 다이아몬드 2 다이아몬드 4 하트 4 다이아몬드 5 하트 6 다이아몬드 7 다이아몬드 9 다이아몬드 10 다이아몬드 10 11 다이아몬드 13 다이아몬드

전체 루프를 단계별로 실행한 후 출력:

10 하트 6 클럽 8 하트 5 하트 5 클럽 7 다이아몬드 5 스페이드 11 다이아몬드 12 스페이드 12 클럽 8 다이아몬드 5 다이아몬드 9 스페이드 10 다이아몬드 12 하트 8 스페이드 13 클럽 6 하트 1 스페이드 11 스페이드 1 하트 12 다이아몬드 4 클럽 3 클럽 8 클럽 9 다이아몬드 7 7 클럽 2 클럽 3 다이아몬드 1 다이아몬드 7 스페이드 10 스페이드 2 하트 6 스페이드 4 스페이드 2 스페이드 2 스페이드 6 다이아몬드 4 하트 2 다이아몬드 4 다이아몬드 11 클럽 11 하트 3 하트 10 클럽 10 클럽 13 하트 13 하트 9 하트 13 다이아몬드

표시된 대로 루프는 내가 루프를 통과할 때만 실행됩니다.다른 루프를 시도하고 새 프로젝트를 만들고 셔플 기능을 컨트롤러로 옮겼지만 아무 도움이 되지 않았습니다.

이 문제를 어떻게 해결해야 할지 아는 사람이 있나요?

도움이 되었습니까?

해결책

이 문제를 중심으로 샘플 앱을 만들고 이동했습니다. Random rnd = new Random() 루프 외부로 내가 기대하는 동작을 제공합니다.

제 생각에는 카드 한 장만 섞은 것처럼 보이는 이유는 무작위로 생성된 값이 전체 루프에서 동일한 값이기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top