打印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)
答案 0 :(得分:1)
好的,所以你有一个IndexOutOfBoundsException
因为在你所有循环的第一次迭代中你有以下状态:
t
为0
,i
为3
original
是"abxy"
reverse
为"y"
(由打印声明确认)j
是0
因此当你reverse.charAt(j + 1)
(ssi.java
的第37行,如堆栈跟踪的括号中所示)时,你将会失败,因为reverse
只包含一个字符(索引为0
)和j + 1 == 1
。 As outlined in the docs,索引必须小于长度:
<强>抛出:强> IndexOutOfBoundsException - 如果index参数为负数或不小于此字符串的长度。