5

每次我编写任何与此类似的代码时,都会收到此类错误。它正在构建一个文件但不让它运行,它只是抛出异常。我不熟悉例外情况,因为我是初学者,请帮助我并特别指出我正在犯的错误。

public static void main(String args[]) {
    String name = "Umer Hassan";
    String name1 = "Hassan Umer";
    char[] name2 = new char[name.length()];

    for (int j = 0; j <= name.length(); j++) {
        for (int i = 0; i <= name.length(); i++) {
            if (name.length() == name1.length()) {
                if (name.charAt(i) == name1.charAt(i)) {
                    name2[i] = name1.charAt(i);
                }
            }
        }
    }
}

当我运行程序时,它显示以下错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 11
    at java.lang.String.charAt(String.java:658)
    at Anagram.main(Anagram.java:24)
4

4 回答 4

4

您的循环控制变量(i/ j)正在上升 name.length()- 这是一个超出范围的索引(因为字符串/列表的最大索引是len - 1- 请记住第一个索引是 0)。

尝试使用i < name.length()andj < name.length()作为循环条件。

于 2012-12-09T18:03:36.800 回答
2

您应该将 for 循环编写为

for (int i = 0; i < name.length(); i++)

字符串中的索引是从零开始的,就像在数组中一样,所以它们的范围是从 0 到长度 - 1。你去到长度,这是超出范围的。

于 2012-12-09T18:03:45.567 回答
1
for (int i=0; i<=name.length();i++){

字符串索引从0.

例子 :

String str = "abc";
int len = str.length(); //will return 3

str.charAt(3);将抛出StringIndexOutOfBoundsException charAt的起始位置是0。所以极限是length-1

您必须将 for 循环更改为for (int i=0; i<name.length();i++){

于 2012-12-09T18:11:59.813 回答
0

尝试这个:

public static void main(String args[]) {
String name = "Umer Hassan";
String name1 = "Hassan Umer";
char[] name2 = new char[name.length()];

for (int j = 0; j < name.length(); j++ {
    for (int i = 0; i < name.length(); i++) {
        if (name.length() == name1.length()) {
            if (name.charAt(i) == name1.charAt(j)) {
                name2[i] = name1.charAt(j);
            }
        }
    }
}

}

于 2012-12-09T18:05:28.537 回答