线程"main" java.lang.StringIndexOutOfBounds异常:字符串索引超出范围:-1 尝试查找回文



我正在尝试制作一个程序,看看一个单词是否是回文。然而,我得到了上述错误。当我运行这个程序时,它会把单词倒过来,直到没有更多的字母了。那是我得到错误的时候。

// Programmer: Your name
// Class, Section and Term: ...
// Purpose: Find the average of a list of integer numbers. The list is ended with a sentiel value SENTINEL.
// Topic: while-loop
// Import the Scanner Class for input operations.
import java.util.Scanner;
public class SimpleProgram {
public static void main(String[] args) {
// Create the Scanner object, scnr, to perform input operations.
Scanner scnr = new Scanner(System.in);
// Declare the identifiers
String reverse;
reverse = "";
int index;
int number;         
String letter;     
final String end = "Stop";

System.out.println("Please type a word:");
letter = scnr.next();
index = letter.length() + 0;

while (!letter.equals(reverse) || (index >= 0)) {
//  while (letter.equals(reverse.length() + 0));

index--;



// index = letter.length()-1 - index--;
// index + 1;
// System.out.println(index.CharAt(index--));

reverse = reverse + letter.charAt(index);
System.out.println(reverse);


}
if (letter.equals(reverse)) {
System.out.println(letter + " is a palindrome!");
}

else {
System.out.println(letter + " is not a palindrome, spelt backwards it is: " + reverse);

}
scnr.close();
}

}

您只需要更改while条件,看看我的版本就可以了!!

public static void main(String[] args) {
// Create the Scanner object, scnr, to perform input operations.
Scanner scnr = new Scanner(System.in);
// Declare the identifiers
String reverse;
reverse = "";
int index;
int number;         
String letter;     
final String end = "Stop";
System.out.println("Please type a word:");
letter = scnr.next();
index = letter.length() - 1;

while (!letter.equals(reverse) && (index >= 0)) {
//  while (letter.equals(reverse.length() + 0));

// index = letter.length()-1 - index--;
// index + 1;
// System.out.println(index.CharAt(index--));
reverse = reverse + letter.charAt(index);
System.out.println(reverse);
index--;

}
if (letter.equals(reverse)) {
System.out.println(letter + " is a palindrome!");
}
else {
System.out.println(letter + " is not a palindrome, spelt backwards it is: " + reverse);
}
scnr.close();

结果:

olaalo is a palindrome!

StringIndexOutOfBoundsException是一种错误类型,当(如本链接所示("索引是负的或者大于字符串的大小";。

为了防止这种情况,很多时候我们会将while循环或for循环的条件设置为字符串的大小(如果向下,则为零(。你试图这样做,但你的错误仍然存在,所以它一定更深一点。

在您的情况下,这可能是因为String字母永远不会等于reverse,所以while循环将永远继续(因此,当索引变为负数时,StringIndexOutOfBounds(。

要解决此问题,您可能需要重新考虑while循环的条件,而是直接根据字符串的长度使用一些东西(而不是相反的情况是否成立(。

最新更新