1 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
您的代碼按預(yù)期工作。
如您所見,它將在輸入中找到127
字符y
( ),作為第一個更大的質(zhì)數(shù)。但是,代碼點為 127 的 ASCII 字符是不可打印的字符,這使得它看起來好像輸出中沒有字符。121
您可能希望[32,126]
通過向findPrimeSmaller
和findPrimeGreater
方法添加一些檢查來將代碼限制在可打印的 ASCII 范圍內(nèi),這樣它們就不會超出此限制(當(dāng)然,不要返回該限制,因為它不是質(zhì)數(shù),但是當(dāng)它到達邊界時返回Integer.MIN_VALUE
和/或類似的東西,所以你知道它會在你的 if-checks 中選擇另一個素數(shù))。?或者如果你想在你的程序中使用非 ASCII unicode 字符,你可能想跳過不可打印的字符。Integer.MAX_VALUE
另外,一般說明:使用 IDE 調(diào)試器或添加打印行,就像我在上面的在線版本中所做的那樣,有助于檢查代碼在哪里出錯以及它做了什么。在這種情況下,您的代碼完全可以正常工作,但生成的字符只是一個不可打印的字符(具有 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;
}
添加回答
舉報