【问题标题】:Java charAt() String index out of range: 5Java charAt() 字符串索引超出范围:5
【发布时间】:2015-10-01 05:47:54
【问题描述】:

我想弄清楚“哪个 5 位数字乘以 4 会得到相反的结果?”使用此代码,但出现错误:线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5 在 java.lang.String.charAt(String.java:658) 在 Digits.main(Digits.java:12)

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

for (int x = 9999; x < 100000 ; x++ ) {
  n = x;
  b = x *4;

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

任何帮助将不胜感激

【问题讨论】:

    标签: java string indexing charat


    【解决方案1】:

    正确。因为前五个字符位于索引0, 1, 2, 34。我会使用StringBuilder(因为StringBuilder.reverse())。而且,我建议您限制变量的可见性。然后记得在更改n 和/或b 时修改numberbackwards。类似的东西

    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
    

    【讨论】:

    • 你对我来说太快了,弗里施!
    【解决方案2】:

    backwardsnumberString,内部使用一个数组。并且数组的索引从 0 到 size-1 。因此这样的语句会抛出 ArrayIndexOutOfBoundsException:

    backwards.charAt(5 )
    number.charAt(5) 
    

    【讨论】:

    • 您的观察是正确的,但这无助于解决他的代码中的问题。
    【解决方案3】:

    在您创建字符串时,您的两个整数都是 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)
    
      . . .
    }
    

    此外,Java 中的数组是零索引的,因此对于字符串“10000”,您的程序将在backwards.charAt(5) 上抛出索引越界异常,因为该字符串的索引是从字符 0 到字符 4。

    【讨论】:

      猜你喜欢
      • 1970-01-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
      相关资源
      最近更新 更多