我为我的CS类编写代码,以确定用户输入的字符串是否是回文。我已经让代码工作了。但是,每当我执行代码时,我都会收到以下消息:
"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.charAt(String.java:658)
at palindrome.Palindrome.main(Palindrome.java:14)"
我认为length
和i
有问题,但我不确定是什么。我的代码如下。我使用aabbaa
作为用户输入的字符串。
package palindrome;
import java.util.Scanner;
public class Palindrome {
public static void main(String[] args) {
System.out.println ("Enter A String:");
Scanner input = new Scanner (System.in);
String s = input.nextLine();
int length = s.length();
int i = 0;
while (length>= 0) {
if (s.charAt(i) == s.charAt(length-1)) {
i++;
length--;
if (length == i) {
System.out.println ("Your string is a palindrome");
length = 0;
}
}
else {
System.out.println ("Your string is not a palindrome");
length = 0;
}
}
}
}
答案 0 :(得分:2)
当length等于0时,while循环中的第一个if语句尝试获取s.charAt(0-1),即s.charAt(-1),这是发生错误的位置。
也许尝试以下(未经测试):
public static void main(String[] args) {
System.out.println ("Enter A String:");
Scanner input = new Scanner (System.in);
String s = input.nextLine();
int length = s.length();
int i = 0;
while (length > 0) {
if (s.charAt(i) == s.charAt(length-1)) {
i++;
length--;
if (length < 1) {
System.out.println ("Your string is a palindrome");
break;
}
}
else {
System.out.println ("Your string is not a palindrome");
break;
}
}
答案 1 :(得分:1)
您编写while(length >= 0) {}
并在main
方法中编写length = 0;
尝试循环。
那应该是while(length > 0){}
答案 2 :(得分:1)
只需创建一个类似下面的方法,并将您的字符串作为参数传递,以测试字符串是否为回文结构。如果字符串是回文,则方法将返回true
想法是反转你的字符串,如果两者相同则与原始字符串比较,那么它就是回文。
public static boolean isPalindrome(String str) {
return str.equals(new StringBuffer().append(str).reverse().toString());
}
答案 3 :(得分:0)
你的问题是,你在每一步中都要迈出两步,但只能将长度减少1
所以跟踪:用户输入foooof
。
length = 6
i = 0
f == f
i = 1
length = 5
o == o
i = 2
length = 4
o == o
i = 3
length = 3 (You've now passed yourself)
o == o
i = 4
length = 2
length-i = -2 => index out of range
答案 4 :(得分:0)
当你迭代while循环时,length的值变为负数,并且数组索引从0
开始,这就是为什么你得到StringIndexOutOfBoundsException
的异常。
你应该试试这个,它会正常工作。
import java.util.Scanner;
public class Palindrome
{
public static void main(String[] args)
{
System.out.println("Enter A String:");
Scanner input = new Scanner(System.in);
String s = input.nextLine();
int length = s.length();
int i = 0;
while (length >= 0)
{
if (s.charAt(i) == s.charAt(length - 1))
{
i++;
length--;
if (length-1 == i)
{
System.out.println("Your string is a palindrome");
length = 0;
break;
}
}
else
{
System.out.println("Your string is not a palindrome");
length = 0;
break;
}
}
}
}
答案 5 :(得分:0)
你应该这样做:
package palindrome;
import java.util.Scanner;
public class Palindrome {
public static void main(String[] args) {
System.out.println ("Enter A String:");
Scanner input = new Scanner (System.in);
String s = input.nextLine();
if ( s.equals(new StringBuffer(s).reverse().toString()) ){
System.out.println ("Your string is a palindrome");
else
System.out.println ("Your string is not a palindrome");
}
}