Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java charAt()字符串索引超出范围:5_Java_String_Indexing_Charat - Fatal编程技术网

Java charAt()字符串索引超出范围:5

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);

我试图用这段代码来计算“当乘以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);
字符串向后=整数。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