簡體   English   中英

回文計划-字符串索引超出范圍異常

[英]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)"

我覺得有什么不對我的lengthi ,但我不知道是什么。 我的代碼如下。 我使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM