2015-03-17 5 views
-1

У меня есть функция, которая должна возвращать результат в зависимости от руки Блэк-Джека. Я использовал оператор switch для этого, хотя я не уверен, что вы можете использовать несколько переключателей в функции. Во всяком случае, я получил сообщение об ошибке «missing; перед выражением "после первого« результата »текста в первом« случае ». Этот код - это то, чему меня учили, поэтому я не уверен, где я ошибся. Не могли бы вы дать мне подсказку или что-нибудь еще, пожалуйста? Верно, Томас.Ошибка в инструкции switch, Javascript

function printResult(playResult, dealResult) { 
var text = ""; 
switch(playResult) { 
    case (playResult == 21) : result "black jack"; 
    break; 
    case (playResult > 21) : result "busted"; 
    break; 
    case (playResult < 21) : result "safe"; 
    break; 
} 

switch(dealResult) { 
    case (dealResult < 17) : result "safe"; 
    break; 
    case (dealResult == 17 && < 21) : result "stop"; 
    break; 
    case (dealResult == 21) : result "black jack"; 
    break; 
} 

return result; 
} 

var result = "Player: " + playResult + ", Dealer: " + dealResult; 


ANSWER = (printResult(5+9+10, 6+3+7)); 
+3

Хмм, найдите (и прочитайте/следуйте) учебник/ссылку на ['switch'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch). Потому что сборка «не сработает». Возможно, вы хотели использовать ['if .. else if'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else)? (Значение после ключевого слова 'case' * должно быть строковым или числовым литералом. После того, как это исправлено или будет устранено, работайте друг с другом по синтаксической ошибке, по одному - обратитесь к справочнику/учебному пособию, пока они не исчезнут.) – user2864740

+0

Подтвердите свой код: [jshint.com] (http://jshint.com) – epascarello

+0

'result" black jack ";' является синтаксической ошибкой. И не имеет ничего общего с «переключателем», который его окружает. – Bergi

ответ

1

Возможно, вы хотите, чтобы результат был переменным?

result = "black jack" 

или, может быть, возвращение?

return "black jack" 
+1

Это действительно * ** ответ ** вопрос? –

+0

@TimLewis: Да, вопрос заключается в том, чтобы идентифицировать источник '' missing; перед сообщением ". Конечно, есть много других вещей, которые нужно исправить :-) – Bergi

+0

Если есть много других вещей, которые нужно исправить, исправьте их! Я только спрашиваю об этом, потому что это не (по-моему, так или иначе) полный ответ. Но кто-то другой соглашается, а кто-то другой думает иначе. –

0

Вы должны удалить все переменные playResult внутри блока переключателей.

Кроме того, переключатель не поддерживает уровень выше или ниже, чем если бы он был лучше подходит для этой ситуации.

function printResult(playResult, dealResult) { 

    var result; 

    if(playResult == 21) { 
    result = "black jack"; 
    } else if(playResult > 21) { 
    result = "busted"; 
    } else { 
    result = "safe"; 
    } 

    if(dealResult < 17) { 
    result = "stop"; 
    } else if(dealResult == 17 && dealResult < 21) { 
    result = "stop"; 
    } else { 
    result = "black jack"; 
    } 

    return result; 
} 

var result = "Player: " + playResult + ", Dealer: " + dealResult; 

ANSWER = (printResult(5+9+10, 6+3+7)); 

Это намного ближе, но все еще есть проблемы с вашей логикой.

0

Похоже, вы пытаетесь сделать «если логика» в заявлении дела; это не то, как работает коммутатор. Переключатель будет принимать значение dealResult и делать прямое сравнение.

switch(dealResult) 
{ 
    case 21: //dealResult MUST be 21 
     result = 'blackjack!' 
     break; 
    case 20: //dealResult MUST be 20 
     //etc.. 
     break; 
    case >20: //not valid, will break 
} 

Насколько я знаю, если вам нужно сделать,> и < сравнивает, вы должны быть используя, если -> еще блок.

0

Глядя на вашу функцию, даже если вы получаете работу переключателя, я не думаю, что логика - это то, к чему вы стремились.

Если цель функции скажу вам, кто выиграл игру, Ergo результат, как ваше имя означает, то вам необходимо сначала поместить правила вниз .. позволяет просто для удобства чтения записать его в псевдо ..

Где либо игрок в блэкджек, проверьте следующее

  1. игрока блэкджек дилеру Blackjack = Нажмите (Draw)
  2. игрока блэкджек дилерским Anything = игрок Win
  3. Все игрока к Dealer Blackjack = Dealer Win

Затем проверьте, если один является бюст, чтобы выиграть игрок должен приостановленных

  1. Player> 21 = Dealer Win
  2. Игрок < = 21 и Dealer> 21 = Игрок Win

После этого мы можем выполнить простые проверки.

  1. игрока == Dealer = Нажмите
  2. Игрок> Dealer = Игрок Win
  3. Игрок < Dealer = Dealer Win

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

function blackJackWinnerIs(player, dealer) 
{ 
    if((player == 21) || (dealer==21)) 
    { 
     if(player > dealer) 
     return "Player"; 
     else if (player < dealer) 
     return "Dealer"; 
     else 
     return "Push"; 
    } 
    else if(player > 21) 
     return "Dealer"; 
    else if(dealer > 21) // already checked if player<=21 
     return "Player"; 
    else if(player > dealer) 
     return "Player"; 
    else if(dealer > player) 
     return "Dealer"; 
    else return "Push"; 
} 
var hands = [ 
    {player:21,dealer:21}, 
    {player:20,dealer:21}, 
    {player:21,dealer:17}, 
    {player:22,dealer:17}, 
    {player:17,dealer:22}, 
    {player:19,dealer:18}, 
    {player:18,dealer:20}, 
    {player:20,dealer:20} 
]; 
for(var i=0; i<hands.length;i++) 
{ 
    var winner = blackJackWinnerIs(hands[i].player,hands[i].dealer); 
    console.log("Player:",hands[i].player," Dealer:",hands[i].dealer," => Winner:",winner); 
} 

Это функциональный .. но он не защитит вас от плохих входов, например. если вы случайно прошли два нуля, вы получите результат «толчка», когда действительно вы должны либо отправить сообщение об ошибке, либо аннулировать игру ... но это все на вас.

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