执行字符串反转时IndexOutOfBoundsException

时间:2015-07-23 12:11:13

标签: java

打印3个名称并反转它们,每个名称都必须执行以下指定的功能:

对的差异应该是相同的。

例如:abxy reverse是yxba,(a-b)=(y-x)类似bx = xb,xy = ab。
并且如果所有差异匹配则打印确定,否则打印不正常。

package sss;

import java.util.ArrayList;
import java.util.Scanner;

public class ssi {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String original, reverse = "";
        Scanner sc = new Scanner(System.in);
        int ascii11, ascii12, ascii13, ascii14;
        int a[] = new int[3];
        ArrayList<Integer> ar = new ArrayList<Integer>();

        System.out.println("enter the 3 strings");  
        for(int t = 0; t < a.length; t++) {             
            original = sc.next();           
            int length = original.length();

            for(int i = length - 1; i >= 0; i--) {
                reverse = reverse + original.charAt(i);         
                System.out.println(reverse);

                for(int j = 0; j < original.length() - 1; j++) {
                    ascii11 = original.charAt(j);
                    ascii12 = original.charAt(j + 1);
                    ascii13 = reverse.charAt(j);
                    ascii14 = reverse.charAt(j + 1);

                    if (Math.abs(ascii11 - ascii12) == Math.abs(ascii13 - ascii14)) {           
                        ar.add(0);          
                    } else {
                        ar.add(1);
                    }
                }
            }
        }

        if (ar.contains(1)) {
            System.out.println("pass");
        } else {
            System.out.println("fail");
        }

        // TODO Auto-generated method stub
       sc.close();
    }
}

以下是我得到的例外情况:

enter the 3 strings
abxy
y

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
    at java.lang.String.charAt(String.java:658)
    at sss.ssi.main(ssi.java:37)

1 个答案:

答案 0 :(得分:1)

好的,所以你有一个IndexOutOfBoundsException因为在你所有循环的第一次迭代中你有以下状态:

  • t0i3
  • original"abxy"
  • reverse"y"(由打印声明确认)
  • j0

因此当你reverse.charAt(j + 1)ssi.java的第37行,如堆栈跟踪的括号中所示)时,你将会失败,因为reverse只包含一个字符(索引为0)和j + 1 == 1As outlined in the docs,索引必须小于长度:

  

<强>抛出:   IndexOutOfBoundsException - 如果index参数为负数或不小于此字符串的长度。