2016-03-04 65 views
1

我感覺好像我接近一個解決方案,並且一直在修補它作爲一個newb一段時間。出於某種原因,爲什麼我的"\n"在輸出「下一行」時不會消失,並且輸出有不需要的空白區域?使用Ruby創建一個棋盤,「 n」不會消失

任務:寫一個函數,它需要一個代表花紋板尺寸的參數。董事會將永遠是正方形,所以5意味着你將需要一個5x5板。

黑色方塊將用unicode白色方塊表示,而亮方塊將用unicode黑色方塊表示(相反的顏色可確保在代碼大戰的黑色背景下黑板不會顛倒)。它應該返回一個棋盤的字符串,並在每個方塊之間留出一個空間,並考慮新的線條。

偶數應該返回一個以黑色方塊開始的棋盤。奇數應該返回一個以淺色方塊開始的棋盤。

輸入期望是一個至少爲2的整數,否則返回false(Haskell中沒有)。

我靠近,這裏是我到目前爲止有:

def checkered_board(dimension) 


    black = "\u25A1 " 
    white = "\u25A0 " 
    checkboard = nil 
    checker_array = [] 
    if dimension < 2 or dimension.is_a? String 
    return false 
    else 
    count = dimension 

    while count <= dimension && count > 0 
     if count % 2 == 0 
     checkboard = ("\u25A1 \u25A0" + "\n") 
     checker_array << checkboard 
     count -= 1 
     else 
     checkboard = ("\u25A0 \u25A1" + "\n") 
     checker_array << checkboard 
     count -= 1 
     end 
    end   
    end 

    checkboard = checker_array.join(" ") 
    p checkboard 
end 

這裏是TDD規格:

Test.assert_equals(checkered_board(0), false) 
Test.assert_equals(checkered_board(2), "\u25A1 \u25A0\n\u25A0  \u25A1") 

注意:隱藏的規格表明它應該false如果dimension迴應不是一個整數。 .is_a? String.is_a? Integer也不適用於我。

輸出出現像這樣,並沒有出現連:

□ ■ 
■ □ 

感謝任何及所有幫助:)。

+2

使用'puts'而不是'p'來打印。 –

+0

請明確說明問題。 – mudasobwa

+0

@MladenJablanović謝謝,這確實有幫助。然而,我的輸出是不平衡的,好奇的原因呢?我編輯了我的帖子以顯示我的輸出。 – DustinRW

回答

1

嘗試改變:

if dimension < 2 or dimension.is_a? String 

if !dimension.is_a?(Integer) || dimension < 2 

最左邊的測試將首先完成。目前,如果dimensionString,則首先將它與2進行比較 - 這會引發錯誤 - 然後再測試它是否爲String。在與另一個對象比較之前,您需要檢查對象的類型。

此外,我認爲支票應該是dimension是不是Integer,而不是它是否是String。例如,在您的原始代碼中,如果尺寸爲Array,會發生什麼情況?

+0

謝謝,我試過兩種方法('String'和'Integer')來看看它們的工作。但是,現在我很好奇爲什麼我的產量不平衡。我編輯我的帖子來展示我的輸出。 – DustinRW

1

join方法將連接插入它們之間的空格字符的元素。因此,這條線從程序:

checkboard = checker_array.join(" ") 

將導致該字符串:

"\u25A1 \u25A0\n \u25A0 \u25A1" 

省略參數join應該產生預期的輸出,即:

checkboard = checker_array.join 

參考有關the Array join method的文檔。