Java charAt()字符串索引超出范围:5
我试图用这段代码来计算“当乘以4时,哪一个5位数字给出了它的倒数?”但我得到了错误:线程“main”java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5 位于java.lang.String.charAt(String.java:658) at Digits.main(Digits.java:12)Java charAt()字符串索引超出范围:5,java,string,indexing,charat,Java,String,Indexing,Charat,我试图用这段代码来计算“当乘以4时,哪一个5位数字给出了它的倒数?”但我得到了错误:线程“main”java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5 位于java.lang.String.charAt(String.java:658) at Digits.main(Digits.java:12) 公共类数字{ 公共静态void main(字符串[]args){ int n=0; int b=0; 字符串编号=整数。toString(n);
公共类数字{
公共静态void main(字符串[]args){
int n=0;
int b=0;
字符串编号=整数。toString(n);
字符串向后=整数。toString(b);
用于(int x=9999;x<100000;x++){
n=x;
b=x*4;
如果(数字字符(0)=向后的数字字符(5)和数字字符(1)=向后的数字字符(4)
&&数字。字符(2)=向后。字符(3)和数字。字符(3)=向后。字符(2)
&&数字字符(4)=向后。字符(1)和数字字符(5)=向后。字符(0)){
系统输出println(n);
打破
}
}
非常感谢您提供的任何帮助
向后
和数字
是字符串
,它们在内部使用数组。数组的索引从0到大小-1。因此,此类语句将抛出ArrayIndexOutOfBoundsException:
backwards.charAt(5 )
number.charAt(5)
在创建字符串时,两个整数都是0,因此在程序期间,两个字符串都是“0”。您真正想要的是每次数字更改时字符串都会更改。因此,您的代码应该更像这样:
public class Digits{
public static void main(String[] args) {
int n = 0;
int b = 0;
String number;
String backwards;
for (int x = 10000; x < 100000 ; x++ ) {
n = x;
b = x *4;
number = Integer.toString(n);
backwards = Integer.toString(b)
. . .
}
公共类数字{
公共静态void main(字符串[]args){
int n=0;
int b=0;
字符串编号;
向后串;
用于(int x=10000;x<100000;x++){
n=x;
b=x*4;
数字=整数。toString(n);
向后=整数。toString(b)
. . .
}
此外,Java中的数组是零索引的,因此例如对于字符串“10000”,您的程序将在
backwards.charAt(5)上抛出索引越界异常
因为字符串是从字符0索引到字符4的。正确。因为前五个字符位于索引0、1、2、3
和4
。我会使用StringBuilder
(因为)。而且,我建议您限制变量可见性。然后记得在更改n
和/或b
时向后修改number
和
for (int x = 9999; x < 100000; x++) {
int n = x;
int b = x * 4;
String number = Integer.toString(n);
String backwards = Integer.toString(b);
StringBuilder sb = new StringBuilder(number);
sb.reverse();
if (sb.toString().equals(backwards)) {
System.out.printf("%s * 4 = %s", number, backwards);
}
}
你对我来说太快了,弗里希!你的观察是正确的,但这无助于解决他的代码中的问题。
for (int x = 9999; x < 100000; x++) {
int n = x;
int b = x * 4;
String number = Integer.toString(n);
String backwards = Integer.toString(b);
StringBuilder sb = new StringBuilder(number);
sb.reverse();
if (sb.toString().equals(backwards)) {
System.out.printf("%s * 4 = %s", number, backwards);
}
}
21978 * 4 = 87912