将JavaScript函数转换为

时间:2016-08-05 16:59:18

标签: javascript java function

我需要从这个网站将此代码从JavaScript更改为Java:

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

这是来自另一个函数的调用,该函数生成随机数但是数字为零的概率为1 :(其中“hash”是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;
 }

1 个答案:

答案 0 :(得分: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;
 }

子字符串中的值应为 a 而不是 i 。 你可能认为i =指数。

以下是一项改进。您不需要在Java for循环中创建新变量。

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;
 }