2016-08-05 4 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; 

И это функция: (где моды всегда 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

Stack Overflow - это сайт вопросов и ответов, а не служба перевода кода. Сначала попробуйте перевести код, затем придите к нам, когда вы застряли, убедившись, что нам показали [то, что вы пробовали] (// 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

Смежные вопросы