2016-08-05 102 views
0

我需要從JavaScript的代碼從本網站更改爲Java:轉換JavaScript函數

https://jsfiddle.net/3L6L2fmv/?utm_source=website&utm_medium=embed&utm_campaign=3L6L2fmv

這是從產生隨機數,但有一個1在51機會的另一個函數的調用數是零:(其中, 「散列」 是一個64位的十六進制數)

// In 1 of 51 games the game crashes instantly. 
if (divisible(hash, 51)) 
    return 0; 

而這是函數:(其中mod總是51)

function divisible(hash, mod) { 
// So ABCDEFGHIJ should be chunked like AB CDEF GHIJ 
var val = 0; 

var o = hash.length % 4; 
for (var i = o > 0 ? o - 4 : 0; i < hash.length; i += 4) { 
    val = ((val << 16) + parseInt(hash.substring(i, i+4), 16)) % mod; 
} 

return val === 0; 
} 

所以基本上,當JavaScript版本爲某個散列返回零時,我需要Java版本也爲完全相同的散列返回一個零。

這是我的第一次嘗試,並且由於我對JavaScript的瞭解很少,所以我可以得到很多。

public static double divisible(String hash, int mod) 
{ 
    int val = 0;   
    int o = hash.length() % 4;  
    int i = 0; 

    if(o > 0) {i = o - 4;} 
    if(o < 0) {i = 0;} 

    for (int a = i; a < hash.length(); a += 4) 
    {   
     val = ((val << 16) + Integer.parseInt(hash.substring(i, i+4), 16)) % mod;    
    } 
    return val; 
} 
+3

堆棧溢出是一個問題和答案網站,而不是代碼翻譯服務。嘗試先自己翻譯代碼,然後在遇到困難時找到我們,確保向我們展示[您嘗試過的方式](// stackoverflow.com/help/mcve)。 – FrankerZ

+1

我儘可能地展示了我的嘗試。並卡住了 – Joey

回答

1

看起來你只是在Java代碼中混淆了一些變量,除此之外,它似乎很好。

public static double divisible(String hash, int mod) 
{ 
    int val = 0;   
    int o = hash.length() % 4;  
    int i = 0; 

    if(o > 0) {i = o - 4;} 
    if(o < 0) {i = 0;} 

    for (int a = i; a < hash.length(); a += 4) 
    {   
     val = ((val << 16) + Integer.parseInt(hash.substring(a, a+4), 16)) % mod;    
    } 
    return val; 
} 

子串中的值應一個。 你可能假設i =索引。

改進如下。您不需要在Java中爲循環創建新變量。

public static double divisible(String hash, int mod) 
{ 
    int val = 0;   
    int o = hash.length() % 4;  
    int i = 0; 

    if(o > 0) {i = o - 4;} 
    if(o < 0) {i = 0;} 

    for (; i < hash.length(); i += 4) 
    {   
     val = ((val << 16) + Integer.parseInt(hash.substring(i, i+4), 16)) % mod;    
    } 
    return val; 
} 
+0

أحسنتياسمير..تعجبني –

+0

@AbdennourTOUMI謝謝你,是的它就像風:) –

+1

非常感謝你!一直在掙扎數小時。真的很感謝幫助,並花時間去瀏覽我的糟糕代碼。 – Joey