【问题标题】:Java charAt() String index out of rangeJava charAt() 字符串索引超出范围
【发布时间】:2015-07-13 05:49:15
【问题描述】:

我想弄清楚“哪个 5 位数字乘以 4 会得到相反的结果?”使用此代码,但出现错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 5 at java.lang.String.charAt(String.java:658) at     
Digits.main(Digits.java:15)

我想弄清楚(请有人解释)为什么会发生这种情况。如果可能的话,我想将我的 charAt 保留在我的代码中,并且不要使用 StringBuilder (StringBuilder.reverse())

public class Digits{
  public static void main(String[] args) {
    int n = 0;
    int b = 0;
    String number = "";
    String backwards = "";

    for (int x = 9999; x <= 99999 ; x++ ) {
      n = x;
      b = x * 4;
      number = Integer.toString(n);
      backwards = Integer.toString(b);

      if ( number.charAt(0) == backwards.charAt(4) && number.charAt(1) == backwards.charAt(3)
      && number.charAt(2) == backwards.charAt(2) && number.charAt(3) == backwards.charAt(1)
      && number.charAt(4) == backwards.charAt(0)) {
        System.out.println(n);
        break;
      }
    }

谢谢

【问题讨论】:

  • 此代码不可能出现此异常。您没有任何chatAt(5)。再次检查。
  • code 没有给我任何你解释的索引错误
  • 好的,我刚刚意识到代码工作正常。由于某种原因,我的编译器无法正常工作并不断发出错误。

标签: java string indexing charat


【解决方案1】:

代码运行无异常,测试代码如下:

public class Digits {

    public static void main(String[] args) {
        int n;
        n = 0;
        int b;
        b = 0;
        String number;
        number = "";


    String backwards;
        backwards = "";

        for (int x = 9999; x <= 99999; x++) {
            n = x;
            b = x * 4;
            number = Integer.toString(n);
            backwards = Integer.toString(b);

            if (number.charAt(0) == backwards.charAt(4) && number.charAt(1) == backwards.charAt(3)
                    && number.charAt(2) == backwards.charAt(2) && number.charAt(3) == backwards.charAt(1)
                    && number.charAt(4) == backwards.charAt(0)) {
                System.out.println(n);
                break;
            }
        }
    }
}

此代码的输出为 21978

【讨论】:

    【解决方案2】:

    此代码不可能出现此异常。你没有任何chatAt(5)。再次检查。

    【讨论】:

    • 这不是答案,而是评论。
    • @AndyTurner 你想让我做点什么吗?
    • @shekharsuman 这是评论,直到人们发布了答案,包括一些赞成票。然而,这是唯一的可能性,因为 OP 已确认该问题是错误的。由于答案OP现在不能删除问题,我的回答是唯一有效的解释。其他答案应该被否决,因为这不是一个真正的问题。
    猜你喜欢
    • 2015-10-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2012-01-15
    • 2014-06-12
    相关资源
    最近更新 更多