我需要将此网站上的代码从 JavaScript 更改为 Java:
https://jsfiddle.net/3L6L2fmv/?utm_source=website&utm_medium=embed&utm_campaign=3L6L2fmv
这是来自另一个函数的调用,该函数生成随机数,但该数字为零的几率为 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;
}
最佳答案
看来您只是混淆了 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;
}
关于javascript - 将 JavaScript 函数转换为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38794377/