[英]Palindrome String Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
[英]Palindrome program - string index out of range exception
我已經為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;
}
}
}
}
當length等於0時,while循環中的第一個if語句嘗試獲取s.charAt(0-1),iescharAt(-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;
}
}
您編寫while(length >= 0) {}
然后在main
方法中編寫length = 0;
試圖循環。
應該是while(length > 0){}
只需創建如下所示的方法,然后將您的字符串作為參數傳遞,以測試字符串是否是回文。 如果字符串是回文,則方法將返回true
想法是反轉您的字符串,並與原始字符串進行比較(如果兩者相同),那么這就是回文。
public static boolean isPalindrome(String str) {
return str.equals(new StringBuffer().append(str).reverse().toString());
}
您的問題是,在每一步中您都邁出了兩個大步,但只將長度減少了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
當您在那時迭代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;
}
}
}
}
您應該執行以下操作:
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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.