我的 for 循环的 i 和 j 比我的 minimax 算法中的应该高
i and j of my for loops are getting higher then they should in my minimax algorithm
我当前的代码如下所示:
let bestScore = -Infinity
let move;
for(i = 0; i < board.length; i++)
{
for(j = 0; j < board.length; j++)
{
if(whiteFrameNumber.includes(board[i][j])) // spot is available
{
const fieldBefore = board[i][j]
board[i][j] = cross
const score = minimax(board, 0, false)
board[i][j] = fieldBefore
if(score > bestScore)
{
bestScore = score
move = {i, j}
}
}
}
}
board[move.i][move.j] = cross
和我的极小极大算法:
function minimax(board, depth, isMaximizing)
{
const result = checkWinner(board)
if(result !== 'noone won')
{
let score
if(result === cross) score = 1
else if(result === circle) score = -1
else if(result === 'tie') score = 0
}
if(isMaximizing)
{
const bestScore = -Infinity
for(i = 0; i < board.length; i++)
{
for(j = 0; j < board.length; j++)
{
if(whiteFrameNumber.includes(board[i][j])) // spot is available
{
const fieldBefore = board[i][j]
boardi[i][j] = cross
const score = minimax(board, depth + 1, false)
boardi[i][j] = fieldBefore
bestScore = Math.max(score, bestScore)
}
}
}
return bestScore
}
else
{
const bestScore = Infinity
for(i = 0; i < board.length; i++)
{
for(j = 0; j < board.length; j++)
{
if(whiteFrameNumber.includes(board[i][j])) // spot is available
{
const fieldBefore = board[i][j]
boardi[i][j] = circle
const score = minimax(board, depth + 1, true)
boardi[i][j] = fieldBefore
bestScore = Math.min(score, bestScore)
}
}
}
return bestScore
}
}
我收到错误:类型错误:无法设置未定义的 属性 '0'
我还得到:类型错误:无法设置未定义的 属性 '3'
通过调试我发现主循环中的'j'在minimax函数之后被设置为3。
我不知道如何以及为什么,但它会解释错误。
我没有通过进一步调试找到任何解决方案,所以我不知道如何继续。
抱歉我的英语不好^^
您在主循环和 minimax()
函数中使用了相同的 i
和 j
变量。所以 minimax()
中的循环正在更新调用者中的变量。
通过使用 let
或 var
.
声明变量,使变量成为每个函数的局部变量
for (let i = ...) {
for (let j = ...) {
...
}
}
我当前的代码如下所示:
let bestScore = -Infinity
let move;
for(i = 0; i < board.length; i++)
{
for(j = 0; j < board.length; j++)
{
if(whiteFrameNumber.includes(board[i][j])) // spot is available
{
const fieldBefore = board[i][j]
board[i][j] = cross
const score = minimax(board, 0, false)
board[i][j] = fieldBefore
if(score > bestScore)
{
bestScore = score
move = {i, j}
}
}
}
}
board[move.i][move.j] = cross
和我的极小极大算法:
function minimax(board, depth, isMaximizing)
{
const result = checkWinner(board)
if(result !== 'noone won')
{
let score
if(result === cross) score = 1
else if(result === circle) score = -1
else if(result === 'tie') score = 0
}
if(isMaximizing)
{
const bestScore = -Infinity
for(i = 0; i < board.length; i++)
{
for(j = 0; j < board.length; j++)
{
if(whiteFrameNumber.includes(board[i][j])) // spot is available
{
const fieldBefore = board[i][j]
boardi[i][j] = cross
const score = minimax(board, depth + 1, false)
boardi[i][j] = fieldBefore
bestScore = Math.max(score, bestScore)
}
}
}
return bestScore
}
else
{
const bestScore = Infinity
for(i = 0; i < board.length; i++)
{
for(j = 0; j < board.length; j++)
{
if(whiteFrameNumber.includes(board[i][j])) // spot is available
{
const fieldBefore = board[i][j]
boardi[i][j] = circle
const score = minimax(board, depth + 1, true)
boardi[i][j] = fieldBefore
bestScore = Math.min(score, bestScore)
}
}
}
return bestScore
}
}
我收到错误:类型错误:无法设置未定义的 属性 '0'
我还得到:类型错误:无法设置未定义的 属性 '3'
通过调试我发现主循环中的'j'在minimax函数之后被设置为3。 我不知道如何以及为什么,但它会解释错误。
我没有通过进一步调试找到任何解决方案,所以我不知道如何继续。
抱歉我的英语不好^^
您在主循环和 minimax()
函数中使用了相同的 i
和 j
变量。所以 minimax()
中的循环正在更新调用者中的变量。
通过使用 let
或 var
.
for (let i = ...) {
for (let j = ...) {
...
}
}