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)
字符串的合法索引从 0
到 String.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
.
由于某种原因出现此错误,我不知道为什么。它出现在第 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)
字符串的合法索引从 0
到 String.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
.