为什么由于数组中数字1的位置,我会从函数中得到不同的结果

Why would I get different results from a function due to the position of number 1 in an array?

本文关键字:函数 结果 位置 数组 为什么 数字 于数组      更新时间:2023-09-26

我遇到了一些问题,无法继续21点游戏。首先,当我在浏览器中打开网站时,我的aceCard函数会被调用,只有当你打出1(王牌)时才会被调用。下面我写了一些我在使用aceCard功能时注意到的问题。

当你在userArray中得到数字1时,你需要调用aceCard();在控制台中。或者至少我没有自动打这个电话。

1.当数字1在数组中的位置0时,javascript无法识别1。

2.当数字1在阵列中的位置1时,aceCard功能将工作,并将值更改为1到11

3.当数字1在数组中的位置2时,它会看到数组中的值1,但不会将值1更改为11。如果数组位置0=1,那么它将看不到数组中的位置2。

任何帮助都会很好,我不知道为什么这会根据数字1在userArray中的位置而有所不同。

var userArray = [];
var computerArray = [];
var a = userArray.indexOf(1);
function random_number() {
  var randNum = Math.floor(Math.random() * 10 + 1);
  return randNum;
}
document.getElementById('dealButton').onclick = function() {
  userArray.push(random_number(), random_number());
  computerDeal();
  computerDeal();
  calcTotal(userArray);
  showMe(calcComputerTotal(userArray));
  //cardMaker ();
  //cardMaker ();
  //inputMyCardValue ();
  //inputMyCardValue ();
  cardMaker(random_number());
  cardMaker(random_number());
  //inputMyCardValueComputer ();
  //inputMyCardValueComputer ();
  return userArray;
}
document.getElementById('hitButton').onclick = function() {
  userArray.push(random_number());
  //computerHit();
  calcTotal(userArray);
  showMe(calcComputerTotal(userArray));
  cardMaker(random_number());
  //inputMyCardValue ();
  //cardMakerComputer ();
  //inputMyCardValueComputer ();
  return userArray;
}
if (userArray.indexOf(1)) {
  aceCard();
}
function aceCard() {
  if (userArray.indexOf(1)) {
    var numberDesired = parseInt(prompt('You got an Ace card! Do you want it to equal 1 or 11?'));
    if (numberDesired === 11) {
      var a = userArray.indexOf(1);
      userArray[a] = 11;
      inputMyCardValue();
      calcTotal(userArray);
    };
  };
}
function stay() {
  //have computer try to get closest to 21 as posible
}
/*function cardMaker (number) {
		var id = 'card' + ($('#cardTable').children().length + 1);
  			$("#cardTable").append('<div id="' + id + '" class="cardLook">' + number + '</div>');
  		
	}*/
function cardMakerComputer() {
  var id = 'cardComputer' + ($('#computerCardValues').children().length + 1);
  $("#cardTable").append('<div id="' + id + '" class="cardLook"></div>');
}
function inputMyCardValue() {
  card1.innerHTML = userArray[0];
  card2.innerHTML = userArray[1];
  card3.innerHTML = userArray[2];
  card4.innerHTML = userArray[3];
  card5.innerHTML = userArray[4];
  card6.innerHTML = userArray[5];
}
function cardMaker() {
  var id = 'card' + ($('#cardTable').children().length + 1);
  $("#cardTable").append('<div id="' + id + '" class="cardLook">' + userArray[$('#cardTable').children().length] + '</div>');
}
inputMyCardValue()
inputMyCardValue()
function inputMyCardValueComputer() {
  card10.innerHTML = computerArray[0];
  card20.innerHTML = computerArray[1];
  card30.innerHTML = computerArray[2];
  card40.innerHTML = computerArray[3];
  card50.innerHTML = computerArray[4];
  card60.innerHTML = computerArray[5];
  aceCard();
}
function calcTotal(userArray) {
  var total = 0;
  for (var i = 0; i < userArray.length; i++) {
    total += userArray[i];
  }
}
function calcComputerTotal(computerArray) {
  var total = 0;
  for (var i = 0; i < computerArray.length; i++) {
    total += computerArray[i];
  }
  return total;
}
function showMe(VAL) {
  var total = calcComputerTotal(userArray);
  total = document.getElementById('out2');
  parent = total;
  parent.innerHTML = VAL;
}
//Cumputer logic
function computerDeal() {
    computerArray.push(random_number(), random_number());
  }
  /*function computerHit () {
		if (calcComputerTotal(computerArray) <= 17) {
			computerArray.push(random_number());
		} 
	}*/
  //when 1 is in position 0 in array javascript don't reconise the 1.
  //when 1 is in position 1 in array aceCard function will work and change value to 1 to 11
  //when 1 is in position 2 in array it see's value 1 in the array, but won't change value 1 to 11. if array position 0 = 1 then it won't see position 2 in the array.
body {
  background-color: lightgrey;
}
#mainContainer {
  margin: 0 auto;
  padding: 15px;
}
#cardTable {
  height: 240px;
  width: 95%;
  background-color: green;
  border-radius: 5px;
  margin: 15px 0 15px 0;
}
#computerCardValues {
  height: 240px;
  width: 95%;
  background-color: green;
  border-radius: 5px;
  margin: 15px 0 15px 0;
}
#out2 {
  margin-bottom: 5px;
}
.cardLook {
  border: 1px solid black;
  width: 120px;
  height: 190px;
  border-radius: 5px;
  float: left;
  margin: 20px;
  padding: 5px;
  background-color: #fff;
}
#card1,
#card2,
#card3,
#card4,
#card5 {
  transform: rotate(180deg);
  transform: rotate(0deg);
}
#cardComputer10,
#cardComputer20,
#cardComputer30,
#cardComputer40,
#cardComputer50 {
  transform: rotate(180deg);
  transform: rotate(0deg);
}
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
<div id="mainContainer">
  <div id="wrapper">
    <div id="out2">My total</div>
    <button id="dealButton">Deal</button>
    <button id="hitButton">Hit</button>
    <button id="stayButton">Stay</button>
    <div id="cardTable"></div>
  </div>
  <div id="computerWrapper">
    <div id="computerTotal">Computer Total</div>
    <div id="computerCardValues"></div>
  </div>
</div>

标题

您没有正确使用indexOf来测试元素是否在数组中。如果元素在数组中,则返回索引;如果元素不在数组中则返回-1。不能将其用作布尔值,因为-1是truthy——它返回的唯一false值是当元素位于第一个数组元素中时,因为它会返回索引0

所以if (userArray.indexof(1))应该是if (userArray.indexOf(1) != -1)

放也没有意义

if (userArray.indexOf(1)) {
  aceCard();
}

在脚本的顶层。在用户开始发牌之前,userArray中不会有任何内容。所以你应该只在发牌时运行的代码中进行测试。