2014-10-30 3 views
0

Итак, моя проблема в том, что я пытаюсь получить массив, который я получаю после hand1 [o] (5 чисел, полученных случайным образом из первого массива карт []. В коммутатор, чтобы определить, является ли это флешем. Для Например, если переключатель руки1 [1] - ручной 1 [0] = 1, ручной 1 [2] - ручной [1] = 1 ... и т. д. printf («заподлицо с 1 до 5»).Как использовать массив с ключом в C++?

Однако, tbh , Я даже не уверен, что помещать в круглые скобки switch() или void courta(). Я попытался установить hand1 [] или hand1 [], но он говорит, что hand1 не является постоянным значением.

PS Я знаю, что некоторые вещи на испанском языке (поскольку это для испанского класса)

void baraja(); 
void jugadores(); 
void jugadores(k); 
int cards[52] = { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13 }; 
int hand1[5]; 
int x, y; 
int l, k, z; 

int main() 
{ 
    srand(time(0)); 
    baraja(); 
    jugadores(); 
} 

void baraja() 
{ 

for (l = 1; l <= 52; l++) 
{ 
    x = rand() % 52; 
    y = rand() % 52; 
    int temp = cards[x]; 
    cards[x] = cards[y]; 
    cards[y] = temp; 
} 

printf("La baraja revuelta es:\n"); 
for (k = 0; k <= 51; k++) 
{ 
    printf("%d ", cards[k]); 
} 
printf("\n\n"); 
} 

void jugadores(k) 
{ 
int o, n = 5; 
printf("Tus cartas son:\n"); 
for (o = 0; o <= 4; o++) 
{ 
    k = rand() % 52; 
    printf("%d ", cards[k]); 
    hand1[o] = cards[k]; 
} 
printf("\n\n"); 

for (o = 0; o < n ; o++) 
{ 
    for (z = 1; z < (n - o); z++) 
    if (hand1[z - 1] > hand1[z]) 
    { 
     int temp = hand1[z - 1]; 
     hand1[z - 1] = hand1[z]; 
     hand1[z] = temp; 
    } 
} 

printf("Tus cartas en orden incremental son:\n"); 
for (o = 0; o <= 4; o++) 
{ 
    printf("%d ", hand1[o]); 
} 
printf("\n\n"); 
} 

void corrida() 
{ 
switch (hand1) 
{ 
case (hand1[1] - hand1[0] = 1) : 

} 
} 
+1

Я не считаю, что «переключатель» является правильным выбором здесь. – crashmstr

+0

Знаете ли вы какую-нибудь функцию, которая могла бы помочь мне здесь? Проблема заключается в том, что я начинаю основы программирования, поэтому я только узнал, что если и переключиться на «условия»/ – Seung

+0

«case» метки должны иметь константные значения 'case (hand1 [1] - hand1 [0] = 1):' doesn 't имеют постоянное значение. Кроме того, что 'switch (hand1)' не имеет смысла, значение 'hand1' никогда не изменяется. –

ответ

1

Вы не используете switch правильно.

Идея оператора switch состоит в том, чтобы принять выражение, которое может иметь несколько значений, а затем делать что-то другое при каждой возможности. В C++ вам разрешено включать только те вещи, которые являются фундаментальными целыми числами: int или char типы , а не строки (какая из них Java вам позволит) или массивы, которые вы пытаетесь сделать здесь.

Однако switch не подходит для использования здесь, потому что вы заинтересованы в одновременном сравнении значений нескольких выражений. Вам было бы намного лучше использовать структуру if с несколькими выражениями. Что-то вроде:

if(hand1[1] - hand1[0] == 1 && hand1[2] - hand1[1] == 1 && ...) 

Вы также можете сделать это более удобным для чтения с помощью короткого алгоритма «флеш-ознакомительным», как показано ниже:

bool hasFlush(){ 
    for(int i = 1; i < length-of-hand1; i++){ 
     if(hand1[i] - hand1[i-1] != 1) return false; 
    } 
    return true; 
} 

Обратите внимание, что я не тестировал этот код; это всего лишь общая идея. Обратите внимание, что, как указывает Балдрикк в комментариях, этот метод будет работать, только если hand1 сортируется в порядке возрастания. Пример hand {2, 4, 3, 5, 1} не будет обнаружен как флеш, хотя он явно один. Есть способы изменить алгоритм, чтобы сделать эту работу без сортировки.


Я считаю, что вы могли бы также включить bool, но я не знаю, почему вы хотите.

+0

nvm ... Я использовал || который является или ... Это сработало! Большое вам спасибо. C: Я выполнил условие, как вы сказали мне, но единственная проблема, которая, кажется, происходит, заключается в том, что она делает то, что находится в if() {}, даже если условия arent совпадают. \t if (hand1 [1] - hand1 [0] == 1 || hand1 [2] - hand1 [1] == 1 || hand1 [3] - hand1 [2] == 1 || hand1 [4] - hand1 [3] == 1) \t { \t \t printf ("Tienes una Corrida del% d al% d! Felicidades \ n", hand1 [0], hand1 [4]); \t} печатает его, даже если это не флеш (1,2,3,4,5 ... и т. Д.) – Seung

+1

не является (или) человеком, is && (и) – hidrargyro

+0

Обратите внимание, что как для ' for' и long 'if' (используя методы' && 'to make it work) здесь требуется сортировка руки. Если это не так, они не обнаружат их. Вы можете сделать это с помощью вложенного цикла (2 уровня) – Baldrickk

0

Оператор switch состоит из двух частей: первая часть - это то, что вы хотите оценить и находится в скобках части switch() оператора. Вторая часть (или части, действительно) - это константы, с которыми будет оцениваться первая часть. Они должны быть статическими/постоянными значениями для проверки. Поэтому вы не можете использовать выражение, подобное hand1 [1] -hand1 [0], которое может и будет изменяться во время выполнения программы. Вы могли бы использовать, если ... цепочки, однако, и, возможно, выполните то, что ищете.

Смежные вопросы