Java ArrayIndexOutOfBound错误

Java ArrayIndexOutOfBound错误,java,Java,请容忍我。我是java新手,但我正在努力编写代码。但我相信有一天我会克服它,所以请帮助我 字符串数组-回文是我在java中建立逻辑意义的工作。这就是我到目前为止写的 public class Strings1 { public static void main(String[] args) { String[] str = {"dadad", "Boomot", "mojmom"}; String[] str1=str; String[] str2={};

请容忍我。我是java新手,但我正在努力编写代码。但我相信有一天我会克服它,所以请帮助我


字符串数组-回文是我在java中建立逻辑意义的工作。这就是我到目前为止写的

public class Strings1 {

public static void main(String[] args) {
    String[]  str = {"dadad", "Boomot", "mojmom"};
    String[] str1=str;
    String[] str2={};
    int i=0;
    int j=0;
    int k=0;
    char c='0';
    char e='0';
    int s = str.length;

    System.out.println("number of elements in the array" + s);
try{    
    x: for(; i<s; i++){
        y:  for( j=i,k=str[i].length()-1; k>=0; j++,k--){ //j=0; k=5

             c = (str[i].charAt(j)); // 0
             e = (str[i].charAt(k)); //5

             if(c==e)
             {
                 str2[k] = Character.toString(c);
                 continue;
             }
             else 
                 break y;

            }
            System.out.println(str[2]);
        }
}catch (Exception ex){

    ex.printStackTrace();
}

    }

}
公共类字符串1{
公共静态void main(字符串[]args){
字符串[]str={“dadad”、“Boomot”、“mojmom”};
字符串[]str1=str;
字符串[]str2={};
int i=0;
int j=0;
int k=0;
字符c='0';
chare='0';
int s=str.length;
System.out.println(“数组中的元素数”+s);
试试{
x:for(;i=0;j++,k--){//j=0;k=5
c=(str[i].charAt(j));//0
e=(str[i].charAt(k));//5
如果(c==e)
{
str2[k]=Character.toString(c);
持续
}
其他的
打破僵局;
}
System.out.println(str[2]);
}
}捕获(例外情况除外){
例如printStackTrace();
}
}
}
错误:- ------------阵列中的元素数3 java.lang.ArrayIndexOutofBounds异常:4 位于Strings1.main(Strings1.java:25)


我该怎么做呢?请帮忙。

k
str[i]。长度-1
。这意味着,
k
可以是
5
str[i]
只能在
i
介于
0
2
之间时给你一些值,因为
str
数组中只有3个元素。因此,数组越界异常错误

这是:

str2[k] = Character.toString(c);
由于str2是一个空数组,因此每个元素访问都必须失败


您可能想要的是在单个字符串上工作以检测回文(或者您想要做的任何事情)。为它写一个方法。然后,编写另一个处理字符串数组的方法,并对单个字符串使用您的方法。这将帮助您避免嵌套循环和对索引的松散控制。

数组的大小
str2
0
,并尝试在数组中插入
str2[k]=Character.toString(c)行的条目
请将数组
str2
初始化为
String[]str2=新字符串[长度]并继续前进

 k=str[i].length()-1;
i=0
str
的第一个元素是
“dadad”
,长度=5,k=4

str2[k] = Character.toString(c);

此数组没有元素,并抛出
ArrayIndexOutOfBoundsException

不确定您要执行的操作。这个内部循环看起来很可疑,你在这里养成了一个坏习惯

尽量在没有标签的情况下工作,尽量避免
continue
break
,使用本地声明的变量(即仅在需要时声明变量,而不是更早声明),不要尝试提前优化(即在需要时计算
str.length()
,这实际上不需要任何成本)

此外,要验证你的假设是否属实。不要忘记使用
-ea
选项启动程序以启用断言

进行一点编辑以显示我的意思:

class Test {

    public static void main(String[] args) {
        String[] str = { "dadad", "Boomot", "mojmom" };
        String[] str1 = str;
        String[] str2 = {};

        System.out.println("number of elements in the array " + str.length);

        try {
            for (int i = 0; i < str.length; i++) {
                boolean stop = false;
                for (int j = i, k = str[i].length() - 1; k >= 0 && !stop; j++, k--) { // Work on this!!!!

                    assert 0<=j && j<str[i].length();
                    assert k<=j && k<str[i].length();

                    char c = (str[i].charAt(j)); 
                    char e = (str[i].charAt(k));

                    if (c == e) {
                        str2[k] = Character.toString(c);
                    } else {
                        // NOPE!
                        stop = true;
                    }

                }
                System.out.println(str[2]);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
类测试{
公共静态void main(字符串[]args){
字符串[]str={“dadad”、“Boomot”、“mojmom”};
字符串[]str1=str;
字符串[]str2={};
System.out.println(“数组中的元素数”+str.length);
试一试{
对于(int i=0;i=0&&!stop;j++,k--){//处理这个问题!!!!

断言0您最好隔离出错误的确切行,在这之前,打印出一些已知的内容—要索引的数组长度、当前索引位置等,这将帮助您更快地诊断问题。异常会给您一个提示—您正在尝试读取数组的末尾。最好这样做e是在纸上重温你的公式,看看你在哪里没有做正确的边界检查,是什么让你离开了数组。可能是我应该尝试打印这些值,看看哪里出了问题。可能是先处理一个字符串,检查回文,然后处理字符串数组。我想我刚刚失去了对n的控制ested loops!有趣的是,我的名字是Aniket,你的名字是
ingo
,我的全名是
Aniket Inge
lol!//这项工作==>public class Strings1{public static void main(String[]args){String[]str str={“dadadadad”};String reverse=“;int len str[0].length();int i=0;System.out.println(len);//7(i=len-1;i>=0;i--){reverse=reverse+str[0].charAt(i);}System.out.println(reverse);}对不起,大卫。我知道我现在不擅长。整个事情在我看来已经搞糊涂了。所以可能是我应该尝试打印值,看看哪里出了问题。可能是先处理一个字符串,检查回文,然后处理字符串数组。我想我刚刚失去了对嵌套循环的控制!继续!很好的搜索!这s works===>公共类Strings1{public static void main(String[]args){String[]str={“dadadadad”};String reverse=“”;int len=str[0]。length();int i=0;System.out.println(len);//7 for(i=len 1;i>=0;i--{reverse=reverse+str确实是字符串。另请参见:嗨,David,谢谢你的建议,但我现在真的不想使用collection类。我想先用艰苦的方法学习它,然后用java直接理解我的逻辑。我真的想使用循环并努力摆脱它。因此,一旦我有信心,我将使用jav提供的collections和reverse功能a提供。你认为呢?我在正确的轨道上吗?谢谢Aniket。可能我需要再查找一点。我想我已经失去了对嵌套循环的控制!