Я работаю над классом колоды, состоящей из массива карточных объектов. Один из методов, которые я должен написать для этого класса колод, — это метод сортировки, который должен сортировать карты по номеру, заканчиваясь массивом карт в следующем порядке: 1 с каждой масти, 2 с каждой масти, 3 с каждой масти, и так далее.
С этим классом карты,
class card {
public:
int number;
string suit;
card() {number = 1;suit = "blank";}
card(int n, string s) {number = n; suit = s;}
void printCard() {
cout << number << " of " << suit << "s";
}
};
Я пытаюсь реализовать метод для класса колоды, который использует сортировку выбора для сортировки массива.
Это мой код для моего метода sort (), объявленного и определенного в классе колоды:
void sort() {
int min, j;
for(int i=0;i<numCards-1;i++) {
min = i;
for(j=i+1;j<numCards;j++) {
if(cardArray[i].number < cardArray[min].number)
min = j;
}
if(min != i)
swapCards(cardArray[i], cardArray[min]);
}
}
void swapCards(card &a, card &b) {
card temp = a;
a = b;
b = temp;
}
Однако, когда я вызываю его на объекте колоды d, кажется, ничего не происходит. Я написал несколько других методов, которые перетасовывают колоду или обрезают колоду и меняют каждую половину, оба из которых работают, но когда я вызываю sort (), ничего не происходит. Я проверял массив с помощью метода printCards (), и он изменяется, когда я вызываю shuffle () или cut (), но остается таким же, как предыдущая распечатка после вызова sort ().
В основном ():
deck d;
d.printDeck();
cout << endl;
d.shuffle();
d.printDeck();
cout << endl;
d.sort();
d.printDeck();
Распечатка после отладки:
1 of hearts
2 of hearts
3 of hearts
4 of hearts
5 of hearts
6 of hearts
7 of hearts
8 of hearts
9 of hearts
10 of hearts
11 of hearts
12 of hearts
13 of hearts
1 of clubs
2 of clubs
3 of clubs
4 of clubs
5 of clubs
6 of clubs
7 of clubs
8 of clubs
9 of clubs
10 of clubs
11 of clubs
12 of clubs
13 of clubs
1 of spades
2 of spades
3 of spades
4 of spades
5 of spades
6 of spades
7 of spades
8 of spades
9 of spades
10 of spades
11 of spades
12 of spades
13 of spades
1 of diamonds
2 of diamonds
3 of diamonds
4 of diamonds
5 of diamonds
6 of diamonds
7 of diamonds
8 of diamonds
9 of diamonds
10 of diamonds
11 of diamonds
12 of diamonds
13 of diamonds
7 of diamonds
6 of spades
5 of diamonds
12 of clubs
2 of diamonds
5 of spades
8 of diamonds
4 of clubs
1 of hearts
8 of clubs
10 of hearts
13 of diamonds
11 of diamonds
12 of spades
2 of hearts
3 of spades
12 of diamonds
7 of spades
11 of hearts
5 of clubs
5 of hearts
1 of spades
10 of diamonds
7 of clubs
4 of diamonds
3 of diamonds
13 of spades
13 of hearts
12 of hearts
6 of clubs
1 of diamonds
11 of spades
9 of hearts
3 of hearts
9 of diamonds
9 of clubs
10 of clubs
10 of spades
9 of spades
2 of spades
6 of hearts
8 of spades
4 of hearts
1 of clubs
11 of clubs
4 of spades
3 of clubs
2 of clubs
6 of diamonds
8 of hearts
13 of clubs
7 of hearts
7 of diamonds
6 of spades
5 of diamonds
12 of clubs
2 of diamonds
5 of spades
8 of diamonds
4 of clubs
1 of hearts
8 of clubs
10 of hearts
13 of diamonds
11 of diamonds
12 of spades
2 of hearts
3 of spades
12 of diamonds
7 of spades
11 of hearts
5 of clubs
5 of hearts
1 of spades
10 of diamonds
7 of clubs
4 of diamonds
3 of diamonds
13 of spades
13 of hearts
12 of hearts
6 of clubs
1 of diamonds
11 of spades
9 of hearts
3 of hearts
9 of diamonds
9 of clubs
10 of clubs
10 of spades
9 of spades
2 of spades
6 of hearts
8 of spades
4 of hearts
1 of clubs
11 of clubs
4 of spades
3 of clubs
2 of clubs
6 of diamonds
8 of hearts
13 of clubs
7 of hearts
Press any key to continue . . .
Я не очень понимаю, почему с массивом ничего не происходит, учитывая, что я успешно реализовал сортировку выбора для других проектов, включающих массивы и классы. Единственная новая вещь, которую я делаю здесь, это сортировка массива объектов с несколькими переменными, но я уверен, что сравниваю правильные переменные между каждой картой в sort ().
Если кто-то видит явную ошибку или имеет представление о том, что может быть причиной этой проблемы, пожалуйста, дайте мне знать. Это помогло бы мне решить эту проблему.
Редактировать: Добавлен код для других методов, используемых в классе колоды и отладочной информации.
Ваша проблема в выборе min
:
for(j=i+1;j<numCards;j++) {
if(cardArray[i].number < cardArray[min].number)
min = j;
}
На протяжении всего этого цикла min
не меняется, поэтому if
утверждение бессмысленно. Вы, вероятно, хотите проверить cardArray[j]
против текущего минимума:
for(j=i+1;j<numCards;j++) {
if(cardArray[j].number < cardArray[min].number)
min = j;
}