【问题标题】:How to make if/ else statement evaluate for all variables如何使 if/else 语句评估所有变量
【发布时间】:2016-01-13 21:09:23
【问题描述】:

我正在尝试创建一个游戏,用户在其中“下注”下一张牌是否会在显示的前两张牌之间。为了计算它,我创建了一个 52 的随机数并将其设置为等于数组变量值。我需要一个 2-14 而不是 1-52 的数字(在 2 张具有相同 # 和不同套件显示的卡片的情况下评估卡片的 #)。为此,我使用 slice 来获取数组项的第一个字母并将其存储在一个变量中 (num1, num2, numUser)。

然后我使用 if else 语句为面卡(10、jack、queen、king、ace)指定 # 值。问题是,我需要将其应用于所有 3 个变量。目前,该语句在识别一张面卡并设置 # 值时停止。如果有多个面卡,则该声明仅适用于第一个。

我尝试将它包装在一个 for 循环中并使其运行 3 次-例如(for (var i = 0; i > 3; i++),但这不起作用。抱歉,如果这令人困惑,请提供帮助非常感谢。

function outputCards(){
    rand1 = Math.floor((Math.random() * 52));
    rand2 = Math.floor((Math.random() * 52));
    $('#cardUser').attr("src", "#");    
    if(rand1 == rand2){
        rand2 = Math.floor((Math.random() * 52));   
    } else {
        card1 = cards[rand1];
        card2 = cards[rand2];
        $('#cardOne').attr("src", "imgs/" + card1);
        $('#cardTwo').attr("src", "imgs/" + card2);
    }
}

function userCard(){
    rand_user = Math.floor((Math.random() * 52));
    if(rand_user == rand1 || rand_user == rand2){
        rand_user = Math.floor((Math.random() * 52));
    } else {
        user_card = cards[rand_user];
        $('#cardUser').attr("src", "imgs/" + user_card);
    }
}


function outcome(){
    userCard();
    num1 = card1.slice(0,1);
    num2 = card2.slice(0,1);
    numUser = user_card.slice(0,1);
    if(num1 == "j"){
        num1 = 11;
    } else if (num2 == "j") {
        num2 = 11;
    } else if (numUser === "j") {
        numUser = 11;
    } else if (num1 == "q") {
        num1 = 12;
    } else if (num2 == "q") {
        num2 = 12;
    } else if (numUser === "q") {
        numUser = 12;
    } else if (num1 == "k") {
        num1 = 13;
    } else if (num2 == "k") {
        num2 = 13;
    } else if (numUser === "k") {
        numUser = 13;
    } else if (num1 == "a") {
        num1 = 14;
    } else if (num2 == "a") {
        num2 = 14;
    } else if (numUser === "a") {
        numUser = 14;
    } else if(num1 == 1){
        num1 = 10;
    } else if(num2 == 1){
        num2 = 10;
    } else if(numUser == 1){
        numUser = 10;
    } else {


    }
}

【问题讨论】:

  • 如果接收到用户输入的代码立即将人脸卡片字母转换为各自的数字,这将简单得多,因此实际确定结果的逻辑不必处理字母。换句话说,您对卡片的内部表示应该始终是一个数字。你应该只处理字母作为输入和输出。

标签: javascript jquery arrays if-statement


【解决方案1】:

嗯,有更有效的方法来实现这一点,最直接(并且对初学者友好)的一种方法是如果树不是一棵树,则使用 3 else。

if(num1 == "j"){
    num1 = 11;
} else if (num2 == "j") {
    num2 = 11;
} else if (numUser === "j") {
    numUser = 11;
...

当它们需要分开时,你可以将它们组合在一起

if(num1 == "j"){
    num1 = 11;
} else if (num1 == "q") {
    num1 = 12;
} else if (num1 === "k") {
    num1 = 13;
...


if(num2 == "j"){
    num2 = 11;
} else if (num2 == "q") {
    num1 = 12;
} else if (num2 === "k") {
    num2 = 13;
...

这可以通过将 if 语句放在函数中来实现

function outcome(number){
    if(number == "j"){
        return 11;
    } else if (number == "q") {
        return 12;
    } else if (number === "k") {
      ...
    } //etc
}

num1 = outcome(card1.slice(0,1))
num2 = outcome(card2.slice(0,1))
numUser = outcome(user_card.slice(0,1));

您还可以创建一个对象映射来将卡片字母与数字值映射

var cardMap = {
  j: 11,
  q: 12,
  k: 13,
  ...
}

那你就可以了

num1 = cardMap[card1.slice(0,1)]
num2 = cardMap[card2.slice(0,1)]
numUser = cardMap[user_card.slice(0,1)]

【讨论】:

    【解决方案2】:

    if-elseif 块将在找到真正的条件时停止执行,无论您有多少条件。

    所以你想根据第一个字符来评估变量,你知道那总是一样的,对吧?这是一个很好的机会,可以使用一个简单的函数来完成一项工作(所有函数都应该这样做)。

    function getCardValueFromFirstCharacter(character) {
      // you may need to check for the number as well:
      // if (character == "1") {
      //   return 1;
      // } else if (character == "2") {
      //   return 2;
      // }
      // etc..
      if (character == "j") {
        return 11;
      } else if (character == "q") {
        return 12;
      }
      // etc..
    }
    

    现在,在您的另一个函数中,您的 outcome 函数中,您可以使用所需的每个输入调用这个函数:

     function outcome() {
       userCard();
       num1 = getCardValueFromFirstCharacter(card1.slice(0,1));
       num2 = getCardValueFromFirstCharacter(card2.slice(0,1));
       numUser = getCardValueFromFirstCharacter(user_card.slice(0,1));
    }
    

    这样,我们就有了一个单独的函数,它只负责根据第一个字符来识别卡片的价值。这个函数可以改变它的实现来影响我们需要使用它的所有地方——所以,假设你决定 Jokers 应该被评估为 20,你可以将它添加到那个函数中,你的所有代码现在都可以使用这个新的价值。因此,将我们的代码分解为做一件事并在整个代码库中为该一件事引用的小函数是很重要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多