1 回答
TA贡献1842条经验 获得超12个赞
您的代码按预期工作。
如您所见,它将在输入中找到127
字符y
( ),作为第一个更大的质数。但是,代码点为 127 的 ASCII 字符是不可打印的字符,这使得它看起来好像输出中没有字符。121
您可能希望[32,126]
通过向findPrimeSmaller
和findPrimeGreater
方法添加一些检查来将代码限制在可打印的 ASCII 范围内,这样它们就不会超出此限制(当然,不要返回该限制,因为它不是质数,但是当它到达边界时返回Integer.MIN_VALUE
和/或类似的东西,所以你知道它会在你的 if-checks 中选择另一个素数)。 或者如果你想在你的程序中使用非 ASCII unicode 字符,你可能想跳过不可打印的字符。Integer.MAX_VALUE
另外,一般说明:使用 IDE 调试器或添加打印行,就像我在上面的在线版本中所做的那样,有助于检查代码在哪里出错以及它做了什么。在这种情况下,您的代码完全可以正常工作,但生成的字符只是一个不可打印的字符(具有 unicode 值127
)。
PS:这部分代码可以简化:
if ((temp - lowerPrime) == (greaterPrime - temp)) {
b[k] = lowerPrime;
} else if ((temp - lowerPrime) < (greaterPrime - temp)) {
b[k] = lowerPrime;
} else if ((temp - lowerPrime) > (greaterPrime - temp)) {
b[k] = greaterPrime;
}
到:
if ((temp - lowerPrime) <= (greaterPrime - temp)) { // Single <=, instead of loose == and <
b[k] = lowerPrime;
} else if ((temp - lowerPrime) > (greaterPrime - temp)) {
b[k] = greaterPrime;
}
添加回答
举报