簡體   English   中英

檢查3個值是否與If語句相同

[英]Checking 3 values if are the same with If Statement

我正在構建一個Tic Tac Toe游戲,我想知道這種語法是否有效。 似乎該程序有時運行正確,有時不運行,所以我希望您提出意見。

If ( (spacesArray[0] &&
      spacesArray[1] &&
      spacesArray[2] == (userDraw || compDraw))){
  }

因此,基本上,如果它們具有相同的值(“ x”或“ o”),我將檢查數組中的位置0,1,2。 這個語法正確嗎?

**編輯

對於任何想要在此處查看完整項目的人。 https://codepen.io/Ispaxan/pen/ZaRjZW?editors=0001

您的意思是相同的值。 因此,您需要檢查的第一件事是3個項目。

當3個值相等時,您只需要檢查其中一個等於userDrawcompDraw並完成即可。

通過這種方式。 您可以使if語句運行得更快,因為當第一個或第二個條件失敗時,javascript引擎將不會檢查剩余條件。

if (spacesArray[0] === spacesArray[1] &&
    spacesArray[0] === spacesArray[2] &&
    (spacesArray[0] === userDraw || spacesArray[0] === compDraw) )

編輯:我正在檢查Codepen並注意到這一點。 如果您檢查spacesArray[0] === (userDraw || compDraw)這將是一個錯誤。 因為(userDraw || compDraw)將始終返回userDraw。

我認為,當您僅自己放置spacesArray[0] ,它將檢查它是對還是錯。

您可能要嘗試:

if ( (spacesArray[0] == (userDraw || compDraw) && spacesArray[1] == (userDraw || compDraw) && spacesArray[2] == (userDraw || compDraw))){ }

我將對userDrawcompDraw進行單獨檢查,以便您知道誰獲勝。 另外,出於JavaScript古怪的平等原因,請使用===而不是==

// destructure array
const [a, b, c] = spacesArray;

// check if a is not null or undefined
// check if a and b are equal
// check if a and c are equal
if (a && a === b && a === c) {
  // all 3 are the same value      

  // check if userDraw wins
  if (a === userDraw) {
    console.log(`${userDraw} wins`;
  }

  // check if compDraw wins
  if (a === compDraw) {
    console.log(`${compDraw} wins`;
  } 
}

**詳細說明||原因 在這種情況下將無法正常工作。 **

設定:

const userDraw = 'x';
const compDraw = 'y';
const spacesArray = ['y', 'y', 'y'];

// (userDraw || compDraw) will be 'x'

案件:

if (spacesArray[0] &&
  spacesArray[1] &&
  spacesArray[2] == (userDraw || compDraw)

這是失敗的地方:

if ('y' && // -> true
  'y' && // -> true
  'y' === 'x') // -> false

案件:

if (spacesArray[0] === spacesArray[1] &&
  spacesArray[0] === spacesArray[2] &&
  spacesArray[0] === (userDraw || compDraw))

這是失敗的地方:

spacesArray[0] === spacesArray[1] // 'y' === 'y' -> true
spacesArray[0] === spacesArray[2] // 'y' === 'y' -> true
spacesArray[0] === (userDraw || compDraw) // 'y' === 'x' -> false

首先驗證答案之間的相等性,最后確定其O或X

if ( spacesArray[0] == spacesArray[1] &&
    spacesArray[0] == spacesArray[2] &&
    spacesArray[0] == (userDraw || compDraw))

首先是if ,不是If ,其次不是,這不是正確的語法。 每個測試都必須完整且獨立於其他測試,如:

if (spacesArray[0] == (userDraw || compDraw) &&
    spacesArray[1] == (userDraw || compDraw) &&
    spacesArray[2] == (userDraw || compDraw)){
}

但是,就您而言,這沒有必要,因為您一開始就執行了錯誤的測試。 您應該檢查是否spacesArray中的所有3個元素都具有相同的值,這意味着它們都是“ X”或所有“ O”,並且可以使用Array.prototype.every()方法最有效地完成此操作。 。

 function allX(currentValue) { return currentValue === "X"; } function allO(currentValue) { return currentValue === "O"; } var spacesArray1 = ["X", "O", "O"]; var spacesArray2 = ["X", "X", "O"]; var spacesArray3 = ["X", "X", "X"]; var spacesArray4 = ["O", "O", "O"]; console.log(spacesArray1.every(allX), spacesArray1.every(allO)); console.log(spacesArray2.every(allX), spacesArray2.every(allO)); console.log(spacesArray3.every(allX), spacesArray3.every(allO)); console.log(spacesArray4.every(allX), spacesArray4.every(allO)); // So, to test for tic-tac-toe: function test(player){ if(spacesArray3.every(allX) || spacesArray3.every(allO)){ console.log(player + " wins!"); } else { console.log("Not yet!"); } } test("Scott"); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM