2013-03-03 62 views
-1

我有一個陣列(array1),它是19位長,初始化爲0,另一個陣列(clave)是64位長。我想遍歷array1 64次,而clave也被檢查過。我這樣做:遍歷固定陣列

def fase2 
    j=0 
    for i in 0..63 
     @array1[j][email protected][18].to_i^@array1[17].to_i^@array1[16].to_i^@array1[13].to_i^@clave[i].to_i 
    j=j+1 
    if j>19 
     j=0 
    end 
    end 
    print @array1 
    gets 
end 

有沒有更清潔的方式來做到這一點......?

回答

1

我可以想到一些改進。

  1. 調用所有變量名稱更有意義。 @array1中有什麼?整型?考慮將其稱爲@ints。它很好地稱爲數組的複數名稱。如果可能的話,ji也是如此。使用(0..63).each do |i|代替for i in 0..63。更像紅寶石

  2. 使用運算符之間的間距,特別是等於。 j = 0j=0

  3. 小型判斷條件可以走在一行:j = 0 if j > 19

  4. 爲什麼幻數?爲什麼18,17,16和13特別?把它們放在一個適當命名的數組開始,然後使用陣列#減少,像這樣

    special_indeces = [18, 17, 16, 13] 
    
    ... and then in loop ... 
    
    xor = special_indeces.reduce do |val, index| 
        val^@array1[index].to_i 
    end 
    
  5. 什麼是gets在結束了嗎?那是什麼意思?

祝你好運,那代碼需要嚴重工作。

0

這是未經測試,但它更多的我怎麼會寫內部循環:

def fase2 
    @clave.each do |clave| 
    (0..19).each do |j| 
     @array1[j] = @array1[18].to_i^@array1[17].to_i^@array1[16].to_i^@array1[13].to_i^clave.to_i 
    end 
    end 
    print @array1 
    gets 
end