Java - 字符串索引超出范围

Java - String index out of range

由于某种原因出现此错误,我不知道为什么。它出现在第 70 行,我有以下代码:

if(strNum.charAt(0) == strNum.charAt(strLength))

这是整个程序:(也欢迎任何清理此程序的提示!)

/*
* Ryan Seipp
* This program will find the largest palindrome made from the product of two 3-digit numbers.
* A palindromic number reads the same both ways.
* 8/26/2015
*/
public class LargestPalindromeProduct
{
    public static void main(String[] args)
    {
        //Declare Variables
            int num1 = 999, num2 = 999;
            int product = num1 * num2;

        //Find Palindromic
            while(isPalindromic(product) == false)
            {
                for(num1 = 999; num1 > 0; num1--)
                {
                    for(num2 = 999; num2 > 0; num2--)
                    {
                        product = num1 * num2;

                        if(isPalindromic(product))
                        {
                            System.out.println(toString(product));
                            System.exit(0);
                        }
                    }
                }
            }
    }

    //This method will print the exiting statement
    public static String toString(int product)
    {
        String strProduct = ("The largest palindrome made from the product of two 3-digit numbers is: " + product);
        return strProduct;
    }

    //This method will find if an integer is palindromic
    public static boolean isPalindromic(int x)
    {
        //Convert x to char array
            String strNum = Integer.toString(x);

        //Get length of string
            int strLength = strNum.length();

        //Find if palindromic
            if(strLength == 5)
            {
                if(strNum.charAt(0) == strNum.charAt(strLength))
                {
                    if(strNum.charAt(1) == strNum.charAt(strLength - 1))
                        return true;

                    return true;
                }

                return false;
            }

            else
            {
                if(strNum.charAt(0) == strNum.charAt(strLength))
                {
                    if(strNum.charAt(1) == strNum.charAt(strLength - 1))
                    {
                        if(strNum.charAt(2) == strNum.charAt(strLength - 2))
                            return true;

                        return true;
                    }   

                    return true;
                }

                return false;
            }
    }
}

这是错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(String.java:658)
at LargestPalindromeProduct.isPalindromic(LargestPalindromeProduct.java:70)
at LargestPalindromeProduct.main(LargestPalindromeProduct.java:16)

字符串的合法索引从 0String.length() - 1,因此 strLength 等于 strNum.length() 是非法索引。

您需要将 strLength 替换为 strLength - 1,将 strLength - 1 替换为 strLength - 2,等等

如果 string.length()6,这意味着 String 具有来自索引 0-5 的字符,因此在 6 访问它可能会导致 ArrayIndexOutOfBoundException

在你的情况下,

int strLength = strNum.length();//Available indexes 0,1,2,3,4
if(strLength == 5) {//Because length is 5

    if(strNum.charAt(0) == strNum.charAt(strLength)) {//Here AIOB
    //Because you are trying this : strNum.charAt(5) which is invalid

将行更改为

if(strNum.charAt(0) == strNum.charAt(strLength-1))

它会起作用的。 java 中数组的最后一个元素是 sizeOfArray-1

如果有效,请不要忘记接受答案。

祝你好运

伊曼

关于字符串要记住的是它是一个范围从 0 到 n 的字符数组,因此 str.length() 返回字符串中有多少个字符,而不是最后一个位置是什么。获取最后一个元素是使用str.length() - 1.