加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何修复错误“void value expression”?

发布时间:2020-12-17 03:31:51 所属栏目:百科 来源:网络整理
导读:我写了一个tic-tac-toe程序.我遇到麻烦的程序部分是我收到错误: tac.rb:63: void value expressiontac.rb:65: void value expression 此错误来自我的check_win方法. if str == "xxx" return true and puts "X Wins!" str == "ooo" return true and puts "O
我写了一个tic-tac-toe程序.我遇到麻烦的程序部分是我收到错误:

tac.rb:63: void value expression
tac.rb:65: void value expression

此错误来自我的check_win方法.

if str == "xxx"
                                return true  and puts "X Wins!"
                        str == "ooo"
                                return true and puts "O Wins!"

在我添加“X wins”和“O wins”语句后,它给了我这个错误.

这是我的整个计划:

class Game

        def initialize
                @board=Array.new
                @board[1]="1  __|"
                @board[2]="__"
                @board[3]="|__"
                @board[4]="n2  __|"
                @board[5]="__"
                @board[6]="|__"
                @board[7]="n3    |"
                @board[8]="  "
                @board[9]="|  "
                @turn="x"
                @win_status = false
        end

        def turn
                @turn
        end

        def show_board
                puts "  1   2   3"
                @board.each do |i|
                        print i
                end
                puts ""
        end

        def set_turn #switches turns
        if @turn == "x"
                @turn = "o"
        else @turn == "o"
                @turn = "x"
        end
        end

        def make_move
                puts "Enter x coordinate"
                x=gets.to_i
                puts "Enter y coordinate"
                y=gets.to_i
@board[1]="1  _"+@turn+"|"   if y==1 && x==1
@board[2]="_"+@turn    if y==2 && x==1
@board[3]="|_"+@turn   if y==3 && x==1
@board[4]="n2  _"+@turn+"|" if y==1 && x==2
@board[5]="_"+@turn    if y==2 && x==2
@board[6]="|_"+@turn   if y==3 && x==2
@board[7]="n3   "+@turn+"|" if y==1 && x==3
@board[8]=" "+@turn    if y==2 && x==3
@board[9]="|"+@turn+" n"    if y==3 && x==3
        end
 def win_combo
                return [[@board[1][1] + @board[2][1] + @board[3][2]],[@board[4][2] + @board[5][1] + @board[6][2]],[@board[7][1] + @board[8][1] + @board[9][1]],[@board[1][1] + @board[4][2] + @board[7][1]],[@board[2][1] + @board[5][1] + @board[8][1]],[@board[3][2] + @board[6][2] + @board[9][1]],[@board[1][1] + @board[5][1] + @board[9][1]],[@board[3][2] + @board[5][1] + @board[7][1]]]
        end

        def check_win
                #if some row or column or diagonal is "xxx" or "ooo" then set @win_status = true
                self.win_combo.each do |arr|
                        str = arr.join
                        if str == "xxx"
                                return true  and puts "X Wins!"
                        str == "ooo"
                                return true and puts "O Wins!"

                        end
                end
                return false
        end
end


g = Game.new
while g.check_win != true
        g.show_board
        g.set_turn
        g.make_move
end

解决方法

你需要一个elsif让ruby知道条件变化的地方.这是正确的代码:

if str == "xxx"
  puts "X Wins!"
  return true 
elsif str == "ooo"
  puts "O Wins!"
  return true
end

您还需要结束if块.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读