为什么我得到异常的数组绑定?我是编程初学者。请帮我理解。我试图将字符串转换为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");
}
}
答案 0 :(得分:2)
您获得异常的原因是因为您最初将l =设置为name.length()。当你去l访问char数组时它超出了界限,因为数组将保存0 - name.length() - 1.你需要将l初始化为l = name.length() - 1;也不要使用==比较字符串str.equals(name)。
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;
}
以下是您的计划的完整功能代码:
public static void main(String[] args) {
String name = "anna";
int l = name.length();
int d = l / 2;
l = l - 1;
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.equals(name))
System.out.println("True");
else
System.out.println("False");
}
答案 1 :(得分:0)
可以使用N
和0
之间的索引访问N-1
条目数组。
改变这个:
tmp1 = arr[l];
对此:
tmp1 = arr[l-j-1];
摆脱这个:
l = l-1;
顺便说一下,交换可以在3次分配操作中完成,而不是4次。
所以你不妨改变一下:
tmp = arr[j];
tmp1 = arr[l];
arr[j] = tmp1;
arr[l] = tmp;
l = l-1;
对此:
tmp = arr[j];
arr[j] = arr[l-j-1];
arr[l-j-1] = tmp;