2017-02-27 48 views
-3

所以我有這個函數。無法將數組傳遞給Ruby中的方法

array = Array.new 

def put_array(array) 
    l = array.index(array[-1]) 
    puts l 
    for i in 0...l do 
    puts array[i] 
    end 
end 

put_array([1, 2, 3, 4, 5, 6]) 

輸出打印的數組,但我不斷收到這樣的結果.......

5 
1 
2 
3 
4 
5 

錯誤 ::索引輸出爲5,而預期的輸出應是6.我曾嘗試rindex,array.last而不是陣列[-1],但我一直得到相同的答案

+2

你是怎麼想到的答案是什麼? –

+2

我們不知道輸出。根據您的代碼,此輸出看起來非常合理。你想做什麼/得到什麼? – ndn

回答

0

我不完全確定你的預期輸出是什麼。

但是您的誤差來自於以下事實中紅寶石該陣列的索引是基於零的,即,它們從0開始。因此:

  • 儘管有6個元素的陣列,其最後一個元素的索引爲5 。
  • 這也意味着當你開始迭代你的數組並且索引值爲1時,你將從第二個元素開始。

  • 在另一個說明中,用1...l定義了一個獨佔範圍,即從1到l的整數範圍,不包括l。如果你想包括L,則需要使用1..l

了一個quickfix你的代碼是:

for i in 0..l do 
puts array[i] 
end 

但是,要實現相同的輸出更慣用的方法是:

array.each {|e| puts e} 

而且

l = array.index(array[-1]) 

看起來有點複雜。爲什麼不簡單?

l = array.length 
+0

我錯了,我錯誤索引是長度.....我想打印的長度,所以array.length做了我的工作 – 0sfh

0

如果你只是puts陣列將打印在新的線陣列中的每個元素:

array = [1, 2, 3, 4, 5, 6] 
puts array 
#=> Output: 
1 
2 
3 
4 
5 
6 

def put_array(array) 
    puts array 
end 

> put_array(array) 

如果你想索引的基礎上進行:

> array.each_with_index {|e,i| puts array[i]} 
0

我想你很困惑,因爲0...5輸出數字範圍0,1,2,3,4而不是0,1,2,3,4,5。您需要使用..而非...在該行開始for i in

def put_array(array) 
    l = array.index(array[-1]) 
    puts l 
    for i in 0..l do 
    puts array[i] 
    end 
end 

put_array([1, 2, 3, 4, 5, 6]) 

將輸出:

5 
1 
2 
3 
4 
5 
6 

雖然如其他人所說,有更簡單的方法來達到同樣的輸出。

0

我不確定你是否試圖打印數組,如果是這樣的話..您可以修改代碼這樣

array = Array.new 

def put_array(array) 
    l = array.length 
    for i in 0...l do 
    puts array[i] 
    end 
end 

put_array([1, 2, 3, 4, 5, 6]) 
0

index給你定對象的指數,所以你的情況index(-1)會給nil因爲數組不包含-1

相反,你要做到這一點:

array.index(6) # => 5 (6 is at index 5 of array) 
array[5]  # => 6 (5th item in array is 6)  
array[-1]  # => 6 (-1th (aka last) item in the array is 6) 
array.last  # => 6 (last item in array is 6)