ArrayIndexOutOfBound错误

时间:2014-02-02 17:38:25

标签: java

请耐心等待。我是java的新手,但我很难编码..但我相信有一天我会克服它,所以请帮助我..


字符串数组 - Palindrome是我正在努力在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();
}

    }

}

错误: -  ------------ array3中的元素数量 java.lang.ArrayIndexOutOfBoundsException:4     在Strings1.main(Strings1.java:25)

我该怎么办呢?请帮忙。

5 个答案:

答案 0 :(得分:0)

kstr[i].length - 1。这意味着,k可以是5,而str[i]只能在i介于02之间时为您提供一些值,因为str数组中只有3个元素。因此数组超出绑定异常错误!

答案 1 :(得分:0)

此:

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

由于str2是一个空数组,因此每个元素访问都必须失败。

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

答案 2 :(得分:0)

数组str2的大小为0,并尝试在第str2[k] = Character.toString(c);行的数组中插入该条目 请将数组str2初始化为String[] str2=new String[length];并继续前进

答案 3 :(得分:0)

 k=str[i].length()-1;

i = 0str的第一个元素是"dadad",长度= 5,k =现在4。

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

此数组没有元素并抛出ArrayIndexOutOfBoundsException

答案 4 :(得分:0)

不确定你要做什么。那个内圈看起来很腥,你在这里养成了坏习惯。

尝试使用不带标签,如果可以,请使用continuebreak,使用本地声明的变量(即仅在需要时声明它们,而不是更早)不要试图尽早优化(即在需要时计算str.length(),它实际上不需要你花费)。

此外,use assertions验证您的假设确实如此。不要忘记使用-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();
        }
    }
}