2014-03-12 81 views
-2

我想用input(n,m)打印棋盤。 n代表列,m代表行。例如,"4,3"應該輸出:意外的關鍵字結束錯誤?

0101 
1010 
0101 

我的代碼給出了一個 「意外keyword_end,期待$結束」 錯誤:

def zero_col(n) 
    n.times{|x| print n%2} 
end 
def fir_col(n) 
    n.times{|x| x%2==0 ? print 1 : print 0} 
end 
def chess(input) 
    n,m=input[0].to_i, input[2].to_i 
    m.times{|x| x%2==0 ? zero_col(n) : fir_col(n)} 
end 
chess("3,2") 

它也包含了另一個錯誤:

syntax error, unexpected tINTEGER, expecting keyword_do or '{' or '(' 
    n.times{|x| x%2==0 ? print 1 : print 0} 
          ^

上午我使用?:錯誤?

+1

Ruby中的方法以'def'而不是'function'開頭。 – squiguy

+0

是的!我不敢相信我犯了這個錯誤 – user3366240

+0

今後請通過堅持提到的[這裏](http://stackoverflow.com/help/how-to-ask)發佈帖子。所有讀者都應該清楚你的問題。 –

回答

0

不要使用三元(?:)進行流量控制。

通常在Ruby中避免使用它,並在使用它時將其用於返回不同結果的簡單測試,類似於單行的if/else

4.times{ |x| 
    print x%2==0 ? 1 : 0 
} 

此外,使用空白寬鬆,因爲它有助於可讀性。例如,「isthisreadable」,「或是這個」?

而且,使用括號來幫助從三元結果中定義邏輯。這不是絕對必要的語法,但它有助於可讀性。

4.times{ |x| 
    print (x % 2 == 0) ? 1 : 0 
} 
1

在Ruby中,方法聲明爲def關鍵字,因此將其從functions更改爲def

0

變化

n.times { |x| x%2==0 ? print 1 : print 0 } 
# actually parsed as 
# n.times { |x| x%2==0 ? print(1 : print 0}), which is invalid syntactically. 

n.times { |x| x%2==0 ? print(1) : print(0) } 
+0

謝謝!我還有一個問題:爲什麼zero_col(3)輸出「111」而不是「010」? – user3366240

+0

@ user3366240可能是您的代碼邏輯錯誤。 –

+0

@ user3366240因爲您正在塊內打印'n%2'(方法參數)而不是'x%2'(枚舉器)。 –

相關問題