回文java程序的数组索引越界异常
为什么要获取异常的数组边界?我是编程初学者。请帮我理解。我尝试将字符串转换为字符数组,反转字符,将最终结果转换回字符串,并与原始字符串进行比较回文java程序的数组索引越界异常,java,arrays,indexoutofboundsexception,palindrome,Java,Arrays,Indexoutofboundsexception,Palindrome,为什么要获取异常的数组边界?我是编程初学者。请帮我理解。我尝试将字符串转换为字符数组,反转字符,将最终结果转换回字符串,并与原始字符串进行比较 /* to check if the entered string is palinrome or not*/ class Palin { public static void main(String[] args) { String name="anna"; int l=name.length(); int d=l/2; char tmp; char
/* to check if the entered string is palinrome or not*/
class Palin
{
public static void main(String[] args)
{
String name="anna";
int l=name.length();
int d=l/2;
char tmp;
char tmp1;
char[] arr = name.toCharArray();
for(int j=0;j<d;j++) /*to swap the characters*/
{
tmp=arr[j];
tmp1=arr[l];
arr[j]=tmp1;
arr[l]=tmp;
l=l-1;
}
String str=String.valueOf(arr); /* to convert the swapped char array back to string*/
if (str==name)
System.out.println("True");
else
System.out.println("False");
}
}
/*检查输入的字符串是否为palinrome*/
佩林班
{
公共静态void main(字符串[]args)
{
String name=“anna”;
int l=name.length();
int d=1/2;
char-tmp;
字符tmp1;
char[]arr=name.toCharArray();
对于(int j=0;j而言,获得异常的原因是您最初将l=设置为name.length()。当您访问位于l的字符数组时,它超出了范围,因为数组将包含0-name.length()-1。您需要将l初始化为l=name.length()-1;也不要使用==来比较字符串do str.equals(name)
publicstaticvoidmain(字符串[]args)
{
String name=“anna”;
**int l=name.length()**
int d=1/2;
char-tmp;
字符tmp1;
char[]arr=name.toCharArray();
对于(int j=0;j可以使用0
和N-1
之间的索引访问N
条目数组
更改此项:
tmp1 = arr[l];
tmp = arr[j];
tmp1 = arr[l];
arr[j] = tmp1;
arr[l] = tmp;
l = l-1;
为此:
tmp1 = arr[l-j-1];
tmp = arr[j];
arr[j] = arr[l-j-1];
arr[l-j-1] = tmp;
并且摆脱这个:
l = l-1;
顺便说一下,交换可以在3个赋值操作中完成,而不是在4个赋值操作中完成。
因此,您不妨更改以下内容:
tmp1 = arr[l];
tmp = arr[j];
tmp1 = arr[l];
arr[j] = tmp1;
arr[l] = tmp;
l = l-1;
为此:
tmp1 = arr[l-j-1];
tmp = arr[j];
arr[j] = arr[l-j-1];
arr[l-j-1] = tmp;
brsp05是正确的,您的例外是使用name.length()
作为最后一个索引
要首先避免此类错误,您可以在此处避免使用数组,而是使用StringBuilder
类。它提供了一种反转字符串的方法:
String name = "anna";
String str = new StringBuilder(name).reverse().toString();
if (str.equals(name))
System.out.println("True");
else
System.out.println("False");
使用此方法可避免大量不必要且容易出错的代码。int l=name.length();这将存储字符串“anna”的长度这将是4。因此,l=l-1的部分将有3个,并在每个循环上逐个减少。这是我的理解。你能帮我修复它吗?它只会在你尝试访问不存在的arr[4]之后减少。arr[0-3]是有效的索引,你在访问arr[4]之前不会执行l=l-1。这是问题所在,但不是代码的唯一问题。请确保将str==name更改为str.equals(name)。