在 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 值。
比如你输入12
,str.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));
相反。
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 值。
比如你输入12
,str.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));
相反。