在 Java 中将类型转换数字作为数组中的索引时出错

Getting error while taking typecasted number as index in array In Java

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String table[] = { " ", ".+@$", "abc", "def", "ghi", "jkl" , "mno", "pqrs" , "tuv", "wxyz" };
        String str = sc.nextLine();
        int cn =(int)str.charAt(0);
        System.out.println(table[cn]);
    }
}

对于输入 12,这段代码给我的错误是:- 线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException:49 在 Main.main(Main.java:8)

谁能解释一下为什么会出现这个错误以及如何消除这个错误?

.charAt() 方法 return 是一个字符,当你将它解析为 int 时,它会给你该字符的 ascii 值。

比如你输入12str.charAt(0)就会return'1',把这个字符转换成int就会得到49(ascii值对于字符 1) 和索引号 49 超出了 table 数组的范围。

解法:

您可以通过将 str.charAt(0) 的 return 值作为参数传递给 String.valueOf() 然后通过将 String.valueOf() 的 return 值作为参数传递给 Integer.parseInt().

String 解析为 int 类型
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String table[] = { " ", ".+@$", "abc", "def", "ghi", "jkl" , "mno", "pqrs" , "tuv", "wxyz" };
    String str = sc.nextLine();
    
    int cn = Integer.parseInt(String.valueOf(str.charAt(0)));   // <-----
    
    System.out.println(table[cn]);
}

您还可以使用 + 运算符将 str.charAt(0) 与空 String 连接起来,然后将结果 String 传递给 Integer.parseInt()

int cn = Integer.parseInt("" + str.charAt(0));

正如 Yousaf 提到的,您正在将 character 类型转换为 int ,因此您得到的是 character 的 ascii 值,而不是 number 。要使其正常工作,请更新代码的这一行

int cn =(int)str.charAt(0);

int cn = Integer.parseInt(String.valueOf(str.charAt(0)));

我推荐你使用这个:

int cn = Integer.parseInt(sc.nextLine().charAt(0));

相反。