第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法將 ascii 121 打印到字符 y,而是打印一個特殊字符

無法將 ascii 121 打印到字符 y,而是打印一個特殊字符

慕工程0101907 2023-05-24 15:01:42
給定一個字符串,我必須找到字符串中每個字符的 ASCII。如果任何 ASCII 不是素數(shù),則必須將其轉(zhuǎn)換為最接近的素數(shù) ASCII。如果兩個素數(shù) ASCII 與原始 ASCII 等距,則取較小的。在上述操作之后,我需要將生成的 ASCII 轉(zhuǎn)換為字符串。但是我的代碼的問題是它不能打印 y form ASCII 121請幫我找出錯誤;提前致謝    int T = s.nextInt();    int len;    byte lowerPrime, greaterPrime, temp;    String word;    byte[] b;    for (int i = 0; i < T; i++) {        len = s.nextInt();        s.nextLine();        word = s.nextLine();        b = word.getBytes(StandardCharsets.US_ASCII);        for (int k = 0; k < b.length; k++) {            temp = b[k];            if (!checkPrime(temp)) {                lowerPrime = findPrimeSmaller(temp);                greaterPrime = findPrimeGreater(temp);                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;                }            }        }        System.out.println(new String(b, "UTF-8"));    }}private static boolean checkPrime(byte n) {    if (n == 1) {        return false;    }    byte i = 2;    while (i < (n / 2)) {        if (n % i == 0) {            return false;        }        i++;    }    return true;}private static byte findPrimeGreater(byte n) {    while (!checkPrime(n)) {        n++;    }    return n;}private static byte findPrimeSmaller(byte n) {    while (!checkPrime(n)) {        n--;    }    return n;}
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻1842條經(jīng)驗 獲得超13個贊

您的代碼按預(yù)期工作。

如您所見,它將在輸入中找到127字符y( ),作為第一個更大的質(zhì)數(shù)。但是,代碼點為 127 的 ASCII 字符是不可打印的字符,這使得它看起來好像輸出中沒有字符。121

您可能希望[32,126]通過向findPrimeSmallerfindPrimeGreater方法添加一些檢查來將代碼限制在可打印的 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;

}


查看完整回答
反對 回復(fù) 2023-05-24
  • 1 回答
  • 0 關(guān)注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號