ruby代码在运行时停止,看似无限循环

时间:2014-12-21 05:53:11

标签: ruby arrays loops infinite-loop

如果我运行代码,它将停止并且不执行任何操作,我无法键入。似乎是一个无限循环。 问题似乎是循环结束,但如果我把它拿出来,我的条件将无法满足。 谁能找到解决方案?我已经尝试了所有我能想到的循环。

/. 2d array board ./

board = Array.new(10) { Array.new(10, 0) }

/. printing board ./

if board.count(5) != 5 && board.count(4) != 4 && board.count(3) != 3

  for i in 0..9
    for j in 0..9
      board[i][j] = 0
    end
  end

  aircraftcoord1 = (rand*10).floor
  aircraftcoord2 = (rand 6).floor
  aircraftalign = rand
  if aircraftalign < 0.5
    for i in 0..4
      board[aircraftcoord2+i][aircraftcoord1] = 5
    end
  else
    for i in 0..4
      board[aircraftcoord1][aircraftcoord2+i] = 5
    end
  end

  cruisercoord1 = (rand*10).floor
  cruisercoord2 = (rand 7).floor
  cruiseralign = rand
  if cruiseralign < 0.5
    for i in 0..3
      board[cruisercoord2+i][cruisercoord1] = 4
    end
  else
    for i in 0..3
      board[cruisercoord1][cruisercoord2+i] = 4
    end
  end

  destroyercoord1 = (rand*10).floor
  destroyercoord2 = (rand 8).floor
  destroyeralign = rand
  if destroyeralign < 0.5
    for i in 0..2
      board[destroyercoord2+i][destroyercoord1] = 3
    end
  else
    for i in 0..2
      board[destroyercoord1][destroyercoord2+i] = 3
    end
  end

end until board.count(5) == 5 && board.count(4) == 4 && board.count(3) == 3


print " "

for i in 0..9
  print i
end

puts

for i in 0..9
  print i
  for j in 0..9
    print board[i][j]
  end
  puts
end        

1 个答案:

答案 0 :(得分:1)

board.count(5) == 5 ...行永远不会成立,因为board是一个二维数组。我不知道条件应该是什么,但它可能看起来像:

  board[5].count(5) == 5