获取字符并返回键盘等效项

因此,我正在编写代码,该代码将采用一个字符并返回其等效于字符的字母数字键盘。问题是,我在一个盒子里得到了一个问号作为回报。我已经检查了输入是否正确。例如,使用char 'h'输入,我应该得到一个char '4'返回。希望有人能够发现我的错误。代码如下:


public char getDigit(char letter) throws Exception{


    switch (letter) {           

    case 'a': case 'b': case 'c': case '2':

        return 2;

    case 'd': case 'e': case 'f': case '3':

        return 3;

    case 'g': case 'h': case 'i': case '4':

        return 4;

    case 'j': case 'k': case 'l': case '5':

        return 5;

    case 'm': case 'n': case 'o': case '6':

        return 6;

    case 'p': case 'q': case 'r': case 's': case '7':

        return 7;

    case 't': case 'u': case 'v': case '8':

        return 8;

    case 'w': case 'x': case 'y': case 'z': case '9':

        return 9;

    default:

        throw new IllegalArgumentException("Must be a letter or number on the Alpha-Numeric Keypad.");

    }

}


慕婉清6462132
浏览 86回答 2
2回答

蝴蝶刀刀

方法的返回类型为 char。现在采用您的开关语句。返回介于 2 到 9 之间的 char 值。现在看一下 ASCII 表。惊喜:这些字符都是“不可打印”的控制字符。因此,当您打印它们时,您的控制台会给您“?”!如果你想要“4”,你的代码必须返回“4”,而不是4!或 52,因为 ASCII 表中的该条目表示“4”。

蓝山帝景

您没有得到正确的输出,因为您正在用作函数的返回类型。您应该使用int作为返回类型而不是char,因为在开关情况下,您正在与字符进行比较并返回数字值因此将代码替换为以下代码,这将起作用:chargetDigit(..)public int getDigit(char letter) throws Exception{switch (letter) {           case 'a': case 'b': case 'c': case '2':    return 2;case 'd': case 'e': case 'f': case '3':    return 3;case 'g': case 'h': case 'i': case '4':    return 4;case 'j': case 'k': case 'l': case '5':    return 5;case 'm': case 'n': case 'o': case '6':    return 6;case 'p': case 'q': case 'r': case 's': case '7':    return 7;case 't': case 'u': case 'v': case '8':    return 8;case 'w': case 'x': case 'y': case 'z': case '9':    return 9;default:    throw new IllegalArgumentException("Must be a letter or number on the Alpha-Numeric Keypad.");}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java